using System.Windows.Forms; using OpenNest.CNC.CuttingStrategy; using OpenNest.Controls; using OpenNest.Data; using OpenNest.Forms; using static OpenNest.WinForms.Tests.FormTesting; namespace OpenNest.WinForms.Tests.Forms; /// /// Cutting settings kept per machine thickness: the Tabs & Pierce tab of Machine /// Configuration, copying them between thicknesses, and the cutting panel's machine modes. /// public class MachineTabsPierceFormsTests { [Fact] public void TabsPierceTab_SetsTheThicknessesCuttingSettingsOnlyWhileChecked() { RunSta(() => { var directory = Path.Combine(Path.GetTempPath(), "OpenNestTests", Guid.NewGuid().ToString()); Directory.CreateDirectory(directory); try { var provider = new LocalJsonProvider(directory); provider.SaveMachine(new MachineConfig { Name = "Laser", Materials = { new MaterialConfig { Name = "Mild Steel", Thicknesses = { new ThicknessConfig { Value = 0.25 } } } }, }); using var form = new MachineConfigForm(provider); var node = Descendants(Find(form, "_tree").Nodes).Single(n => n.Tag is ThicknessConfig); typeof(MachineConfigForm) .GetMethod("Tree_AfterSelect", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)! .Invoke(form, new object[] { null, new TreeViewEventArgs(node) }); var shown = (ThicknessConfig)node.Tag; var page = All(form).Single().TabPages.Cast().Single(p => p.Text == "Tabs & Pierce"); var use = All(page).Single(c => c.Text == "Use for this thickness"); var panel = All(page).Single(); // A thickness edits its leads on its own tabs, so this panel has none. Assert.Empty(All(page)); Assert.False(use.Checked); Assert.False(panel.Enabled); Assert.Null(shown.Cutting); use.Checked = true; Assert.NotNull(shown.Cutting); Assert.False(shown.Cutting!.Tabs); All(panel).Single(c => c.Text == "Add tabs to hold parts in the sheet").Checked = true; All(panel).Single(r => r.Text == "Tab parts by size").Checked = true; Assert.True(shown.Cutting!.Tabs); Assert.True(shown.Cutting.TabBySize); use.Checked = false; Assert.Null(shown.Cutting); } finally { Directory.Delete(directory, recursive: true); } }); } [Fact] public void CopyCutting_GivesEachThicknessItsOwnCopy() { var source = new ThicknessCuttingConfig { Tabs = true, TabSize = 0.04, TabSizeMaxWidth = 3 }; var copy = MachineConfigForm.CopyCutting(source); Assert.NotSame(source, copy); Assert.True(copy.Tabs); Assert.Equal(0.04, copy.TabSize); Assert.Equal(3, copy.TabSizeMaxWidth); Assert.Null(MachineConfigForm.CopyCutting(null)); } [Fact] public void CuttingPanel_ShowsWhereItSavesAndOffersOnlyMachineLeads() { RunSta(() => { using var panel = new CuttingPanel { MachineLeads = true, Source = "Saved for Fiber 1 · Mild Steel A36 0.25 in", }; panel.LoadFromParameters(new CuttingParameters()); Assert.Contains(All