using System.Runtime.ExceptionServices; using System.Windows.Forms; using OpenNest.Forms; namespace OpenNest.WinForms.Tests.Forms; [Collection("Fill operation lifetime")] public class EditNestInfoFormTests { [Fact] public void ShownEditorOk_FileRoundTripPreservesUnchangedMaterialGradeAndDensity() { RunSta(() => { using var files = new WindowsAcceptanceFiles(); var nest = AcceptanceNest(); AcceptShownEditor(nest, materialName: null); Assert.Equal("Stainless", nest.Material.Name); Assert.Equal("304", nest.Material.Grade); Assert.Equal(0.289, nest.Material.Density); var restored = files.RoundTrip(nest); Assert.Equal("Stainless", restored.Material.Name); Assert.Equal("304", restored.Material.Grade); Assert.Equal(0.289, restored.Material.Density); Assert.Equal("Acceptance nest", restored.Name); }); } [Fact] public void ShownEditorOk_FileRoundTripClearsOldMetadataWhenMaterialNameChanges() { RunSta(() => { using var files = new WindowsAcceptanceFiles(); var nest = AcceptanceNest(); AcceptShownEditor(nest, materialName: "Aluminum"); Assert.Equal("Aluminum", nest.Material.Name); Assert.True(string.IsNullOrEmpty(nest.Material.Grade)); Assert.Equal(0, nest.Material.Density); var restored = files.RoundTrip(nest); Assert.Equal("Aluminum", restored.Material.Name); Assert.True(string.IsNullOrEmpty(restored.Material.Grade)); Assert.Equal(0, restored.Material.Density); Assert.Equal("Acceptance nest", restored.Name); }); } private static Nest AcceptanceNest() { var nest = new Nest("Acceptance nest") { Material = new Material("Stainless", "304", 0.289), Thickness = 0.25, Units = Units.Inches, }; nest.PlateDefaults.Size = new Geometry.Size(10, 20); nest.CreatePlate(); return nest; } private static void AcceptShownEditor(Nest nest, string? materialName) { using var editor = new EditNestForm(nest); editor.Show(); Assert.True(editor.Visible); EditNestInfoForm? info = null; Exception? failure = null; var deadline = DateTime.UtcNow.AddSeconds(10); using var accept = new System.Windows.Forms.Timer { Interval = 20 }; accept.Tick += (_, _) => { info = Application.OpenForms.OfType().SingleOrDefault(); if (info == null) { if (DateTime.UtcNow >= deadline) throw new TimeoutException("The Nest Info editor was not shown."); return; } accept.Stop(); try { Assert.True(info.Visible); Assert.True(info.Modal); if (materialName != null) Assert.IsType(info.Controls.Find("materialBox", true).Single()).Text = materialName; info.EnableCheck(); var ok = Assert.IsType