Files
OpenNest/OpenNest.Desktop.Tests/SavedCutOffHeadLockTests.cs
T
ajandClaude Opus 5.5 725e90dada refactor(desktop): share the new cut-off head-lock defaults
SavedCutOffHeadLock reads and writes CutOffLockHeadHeight and
CutOffHeadLockOvercutInches in the WinForms format and converts the
overcut, always stored in inches, to and from each nest's units, using
1.5 in when the saved overcut is not a positive number. The WinForms
CutOffHeadLockDefaults now calls it, with unchanged behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:13:53 -05:00

101 lines
3.1 KiB
C#

namespace OpenNest.Desktop.Tests;
public class SavedCutOffHeadLockTests
{
// As the WinForms app stores them in user-settings.json.
private static Dictionary<string, string> WinFormsSaved() => new()
{
["CutOffLockHeadHeight"] = "True",
["CutOffHeadLockOvercutInches"] = "2.25",
["LastFeedrate"] = "250",
};
[Fact]
public void Read_TheWinFormsValues()
{
Assert.Equal(new SavedCutOffHeadLock(true, 2.25), SavedCutOffHeadLock.Read(WinFormsSaved()));
}
[Fact]
public void WriteTo_GivesBackTheWinFormsTextUnchanged_AndKeepsOtherSettings()
{
var stored = WinFormsSaved();
var written = new Dictionary<string, string>(stored);
SavedCutOffHeadLock.Read(stored).WriteTo(written);
Assert.Equal(stored, written);
}
[Fact]
public void WriteTo_TheOvercutInRoundTripForm()
{
var written = new Dictionary<string, string>();
SavedCutOffHeadLock.From(false, 1.0, Units.Millimeters).WriteTo(written);
Assert.Equal("False", written["CutOffLockHeadHeight"]);
Assert.Equal("0.03937007874015748", written["CutOffHeadLockOvercutInches"]);
Assert.Equal(1.0 / 25.4, SavedCutOffHeadLock.Read(written).OvercutInches);
}
[Theory]
[InlineData(null, null)]
[InlineData("maybe", "1.5in")]
[InlineData("", "")]
public void Read_MissingOrUnreadable_IsTheWinFormsDefaults(string? lockText, string? overcutText)
{
var settings = new Dictionary<string, string>();
if (lockText != null)
settings["CutOffLockHeadHeight"] = lockText;
if (overcutText != null)
settings["CutOffHeadLockOvercutInches"] = overcutText;
Assert.Equal(new SavedCutOffHeadLock(false, 1.5), SavedCutOffHeadLock.Read(settings));
}
[Fact]
public void ApplyTo_ConvertsTheInchesToAMillimeterNest()
{
var settings = new CutOffSettings();
SavedCutOffHeadLock.Read(WinFormsSaved()).ApplyTo(settings, Units.Millimeters);
Assert.True(settings.LockHeadHeight);
Assert.Equal(2.25 * 25.4, settings.HeadLockOvercut, 9);
}
[Fact]
public void ApplyTo_AnInchNestKeepsTheInches()
{
var settings = new CutOffSettings();
SavedCutOffHeadLock.Read(WinFormsSaved()).ApplyTo(settings, Units.Inches);
Assert.Equal(2.25, settings.HeadLockOvercut);
}
[Theory]
[InlineData(0.0)]
[InlineData(-1.0)]
[InlineData(double.NaN)]
[InlineData(double.PositiveInfinity)]
public void ApplyTo_AnOvercutThatIsNotPositive_Is1Point5Inches(double inches)
{
var settings = new CutOffSettings();
new SavedCutOffHeadLock(true, inches).ApplyTo(settings, Units.Millimeters);
Assert.Equal(1.5 * 25.4, settings.HeadLockOvercut, 9);
}
[Fact]
public void From_AMillimeterNestStoresInches()
{
var saved = SavedCutOffHeadLock.From(true, 50.8, Units.Millimeters);
Assert.Equal(new SavedCutOffHeadLock(true, 2.0), saved);
Assert.Equal(new SavedCutOffHeadLock(true, 2.0), SavedCutOffHeadLock.From(true, 2.0, Units.Inches));
}
}