using System.Collections.Generic;
using System.Linq;
using Sandbox.ModAPI.Ingame;
using VRage.Game.GUI.TextPanel;
using VRageMath;
using Xunit;
using P = AutoMiningScript.Program;
namespace AutoMiningScript.Tests
{
public class DepartureMassDisplayTests
{
sealed class MassRole : P.RoleLogic
{
public double Mass;
public MassRole(P program) : base(program) { }
public override double MeasuredDepartureMass { get { return Mass; } }
}
sealed class Rig
{
public readonly P Program;
public readonly P.Dashboard Dashboard;
public readonly MassRole Role;
public readonly List<MySprite> Sprites = new List<MySprite>();
public Rig(string config)
{
config += "\n[Display]\nAutoPage=false\n";
Program = TestRig.Program(config);
var surface = new Stub<IMyTextSurface>()
.Set("TextureSize", new Vector2(1024, 512)).Set("SurfaceSize", new Vector2(1024, 512))
.Method("MeasureStringInPixels", args => new Vector2(args[0].ToString().Sum(c => c >= 0x2e80 ? 32 : 16), 32) * (float)args[2])
.Method("DrawFrame", args => new MySpriteDrawFrame(frame =>
{
Sprites.Clear(); frame.AddToList(Sprites);
}));
var block = new Stub<IMyProgrammableBlock>().Set("EntityId", 20L)
.Set("CubeGrid", Program.Me.CubeGrid).Set("CustomName", "PB")
.Set("CustomData", config).Set("SurfaceCount", 1).Method("GetSurface", args => surface.Value);
TestRig.SetBase(Program, "Me", block.Value);
TestRig.SetBase(Program, "GridTerminalSystem", new Stub<IMyGridTerminalSystem>().Value);
Dashboard = new P.Dashboard(Program); Role = new MassRole(Program);
}
public string[] Draw(double mass, double now = 0)
{
Program.Now = now; Role.Mass = mass; Dashboard.Draw(Role);
return Sprites.Where(s => s.Type == SpriteType.TEXT).Select(s => s.Data).ToArray();
}
}
[Theory]
[InlineData("")]
[InlineData("[Flight]\nDepartureMass=0\n")]
public void AutomaticConfigurationShowsMeasurementPendingInsteadOfZeroKilograms(string config)
{
var text = new Rig(config).Draw(0);
Assert.Contains(P.L.DisplayConfigMass, text);
Assert.Contains(P.L.DisplayMeasuringMass, text);
Assert.DoesNotContain("0 kg", text);
}
[Fact]
public void AutomaticMeasurementUpdatesCachedConfigurationAndReturnsToPendingWhenInvalidated()
{
var rig = new Rig("[Flight]\nDepartureMass=0\n");
Assert.Contains(P.L.DisplayMeasuringMass, rig.Draw(0));
Assert.Contains(P.L.F(P.L.DisplayAutoMass, "13579"), rig.Draw(13579, 0.5));
var changed = rig.Draw(24680, 1);
Assert.Contains(P.L.F(P.L.DisplayAutoMass, "24680"), changed);
Assert.DoesNotContain(P.L.F(P.L.DisplayAutoMass, "13579"), changed);
Assert.Contains(P.L.DisplayMeasuringMass, rig.Draw(0, 1.5));
}
[Fact]
public void PositiveConfigurationRetainsManualKilogramsEvenWhenAnAutomaticMeasurementExists()
{
var text = new Rig("[Flight]\nDepartureMass=90000\n").Draw(13579);
Assert.Contains("90000 kg", text);
Assert.DoesNotContain(P.L.F(P.L.DisplayAutoMass, "13579"), text);
Assert.DoesNotContain(P.L.DisplayMeasuringMass, text);
}
}
}
using System.Collections.Generic;
using System.Linq;
using Sandbox.ModAPI.Ingame;
using VRage.Game.GUI.TextPanel;
using VRageMath;
using Xunit;
using P = AutoMiningScript.Program;
namespace AutoMiningScript.Tests
{
public class DepartureMassDisplayTests
{
sealed class MassRole : P.RoleLogic
{
public double Mass;
public MassRole(P program) : base(program) { }
public override double MeasuredDepartureMass { get { return Mass; } }
}
sealed class Rig
{
public readonly P Program;
public readonly P.Dashboard Dashboard;
public readonly MassRole Role;
public readonly List<MySprite> Sprites = new List<MySprite>();
public Rig(string config)
{
config += "\n[Display]\nAutoPage=false\n";
Program = TestRig.Program(config);
var surface = new Stub<IMyTextSurface>()
.Set("TextureSize", new Vector2(1024, 512)).Set("SurfaceSize", new Vector2(1024, 512))
.Method("MeasureStringInPixels", args => new Vector2(args[0].ToString().Sum(c => c >= 0x2e80 ? 32 : 16), 32) * (float)args[2])
.Method("DrawFrame", args => new MySpriteDrawFrame(frame =>
{
Sprites.Clear(); frame.AddToList(Sprites);
}));
var block = new Stub<IMyProgrammableBlock>().Set("EntityId", 20L)
.Set("CubeGrid", Program.Me.CubeGrid).Set("CustomName", "PB")
.Set("CustomData", config).Set("SurfaceCount", 1).Method("GetSurface", args => surface.Value);
TestRig.SetBase(Program, "Me", block.Value);
TestRig.SetBase(Program, "GridTerminalSystem", new Stub<IMyGridTerminalSystem>().Value);
Dashboard = new P.Dashboard(Program); Role = new MassRole(Program);
}
public string[] Draw(double mass, double now = 0)
{
Program.Now = now; Role.Mass = mass; Dashboard.Draw(Role);
return Sprites.Where(s => s.Type == SpriteType.TEXT).Select(s => s.Data).ToArray();
}
}
[Theory]
[InlineData("")]
[InlineData("[Flight]\nDepartureMass=0\n")]
public void AutomaticConfigurationShowsMeasurementPendingInsteadOfZeroKilograms(string config)
{
var text = new Rig(config).Draw(0);
Assert.Contains(P.L.DisplayConfigMass, text);
Assert.Contains(P.L.DisplayMeasuringMass, text);
Assert.DoesNotContain("0 kg", text);
}
[Fact]
public void AutomaticMeasurementUpdatesCachedConfigurationAndReturnsToPendingWhenInvalidated()
{
var rig = new Rig("[Flight]\nDepartureMass=0\n");
Assert.Contains(P.L.DisplayMeasuringMass, rig.Draw(0));
Assert.Contains(P.L.F(P.L.DisplayAutoMass, "13579"), rig.Draw(13579, 0.5));
var changed = rig.Draw(24680, 1);
Assert.Contains(P.L.F(P.L.DisplayAutoMass, "24680"), changed);
Assert.DoesNotContain(P.L.F(P.L.DisplayAutoMass, "13579"), changed);
Assert.Contains(P.L.DisplayMeasuringMass, rig.Draw(0, 1.5));
}
[Fact]
public void PositiveConfigurationRetainsManualKilogramsEvenWhenAnAutomaticMeasurementExists()
{
var text = new Rig("[Flight]\nDepartureMass=90000\n").Draw(13579);
Assert.Contains("90000 kg", text);
Assert.DoesNotContain(P.L.F(P.L.DisplayAutoMass, "13579"), text);
Assert.DoesNotContain(P.L.DisplayMeasuringMass, text);
}
}
}