using OpenNest.Data; using OpenNest.Support; namespace OpenNest.Tests.Data; /// /// The machine support grid store (%APPDATA%\OpenNest\support-grid.json): off by default, a /// never-throwing read that keeps each invalid value's default, and unit conversion for new nests. /// public class SupportGridSettingsTests : IDisposable { private readonly string _directory = Path.Combine(Path.GetTempPath(), "OpenNestTests", Guid.NewGuid().ToString()); private readonly string _path; public SupportGridSettingsTests() { Directory.CreateDirectory(_directory); _path = Path.Combine(_directory, "support-grid.json"); } public void Dispose() { if (Directory.Exists(_directory)) Directory.Delete(_directory, recursive: true); } [Fact] public void MissingFile_IsOffAndGivesNewNestsNoGrid() { var settings = SupportGridSettings.Load(_path); var nest = new Nest(); settings.ApplyToNewNest(nest); Assert.False(settings.Enabled); Assert.Null(nest.SupportBed); } [Fact] public void SavedSettingsRoundTripAndConvertToMillimeterNests() { new SupportGridSettings { Enabled = true, PitchX = 2, PitchY = 1, OffsetX = 0.5, OffsetY = -0.25, RegistrationTolerance = 0.125, StabilityMargin = 0.25, }.Save(_path); var nest = new Nest { Units = Units.Millimeters }; SupportGridSettings.Load(_path).ApplyToNewNest(nest); var grid = Assert.IsType(nest.SupportBed); Assert.Equal(50.8, grid.PitchX, 9); Assert.Equal(25.4, grid.PitchY, 9); Assert.Equal(-6.35, grid.OffsetY, 9); Assert.Equal(6.35, grid.StabilityMargin, 9); } [Fact] public void SavedSlatsRoundTrip_AndKeepTheGridValuesForSwitchingBack() { new SupportGridSettings { Enabled = true, PitchX = 3, UseSlats = true, SlatAxis = SlatAxis.X, SlatPitch = 4, SlatThickness = 0.125, SlatOffset = 2, }.Save(_path); var settings = SupportGridSettings.Load(_path); var nest = new Nest { Units = Units.Millimeters }; settings.ApplyToNewNest(nest); var slats = Assert.IsType(nest.SupportBed); Assert.Equal(SlatAxis.X, slats.Axis); Assert.Equal(101.6, slats.Pitch, 9); Assert.Equal(3.175, slats.Thickness, 9); Assert.Equal(50.8, slats.Offset, 9); Assert.Equal(3, settings.PitchX); var fromBed = SupportGridSettings.FromBed(slats, Units.Millimeters, enabled: true, settings); Assert.True(fromBed.UseSlats); Assert.Equal(76.2, fromBed.PitchX, 9); } [Fact] public void OlderFile_WithoutALayout_IsAGrid() { File.WriteAllText(_path, """{"enabled":true,"pitchX":2,"pitchY":2}"""); var settings = SupportGridSettings.Load(_path); Assert.False(settings.UseSlats); Assert.Equal(0.125, settings.SlatThickness); Assert.IsType(settings.BedFor(Units.Inches)); } [Fact] public void InvalidValues_KeepTheirDefaults_AndBadJsonLoadsAsOff() { File.WriteAllText(_path, """{"enabled":true,"pitchX":-1,"pitchY":"x","offsetX":0.5,"stabilityMargin":-2}"""); var settings = SupportGridSettings.Load(_path); Assert.True(settings.Enabled); Assert.Equal(new SupportGridSettings().PitchX, settings.PitchX); Assert.Equal(new SupportGridSettings().PitchY, settings.PitchY); Assert.Equal(0.5, settings.OffsetX); Assert.Equal(new SupportGridSettings().StabilityMargin, settings.StabilityMargin); File.WriteAllText(_path, "{ not json"); Assert.False(SupportGridSettings.Load(_path).Enabled); } }