Files
OpenNest/OpenNest.IO.Tests/BreakoffPersistenceTests.cs
T
ajandClaude Opus 5.5 9d6d5fa4b2 test(io): write test archives through NestArchiveJson
Nine persistence test classes turned a nest or a single drawing into
archive bytes with their own Write helpers, and one kept a private copy
of NestJson. They now use NestArchiveJson.ArchiveBytes and NestJson.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 11:23:01 -05:00

77 lines
2.6 KiB
C#

using System.IO.Compression;
using System.Text;
using System.Text.Json.Nodes;
using OpenNest.Breakoffs;
using static OpenNest.IO.Tests.NestArchiveJson;
namespace OpenNest.IO.Tests;
public class BreakoffPersistenceTests
{
private static Drawing WithBreakoff()
{
var drawing = DrawingPackageFixture.Build();
drawing.Breakoffs.Add(new Breakoff
{
EdgeIds = [Guid.NewGuid(), Guid.NewGuid()],
TabWidth = 0.05,
Flip = true,
TabCenters = [0.025, 1.5, 3.2],
});
return drawing;
}
[Fact]
public void Breakoffs_RoundTripEveryField()
{
var drawing = WithBreakoff();
var original = drawing.Breakoffs[0];
var (restored, warnings) = RoundTrip(ArchiveBytes(drawing));
Assert.Empty(warnings);
var breakoff = Assert.Single(Assert.Single(restored.Drawings).Breakoffs);
Assert.Equal(original.EdgeIds, breakoff.EdgeIds);
Assert.Equal((0.05, true), (breakoff.TabWidth, breakoff.Flip));
Assert.Equal(original.TabCenters, breakoff.TabCenters);
}
[Fact]
public void BreakCutMoves_KeepTheirLayer()
{
var drawing = DrawingPackageFixture.Build();
drawing.Program.MoveTo(4, 5);
drawing.Program.Codes.Add(new OpenNest.CNC.LinearMove(1, 0) { Layer = OpenNest.CNC.LayerType.Break });
drawing.Program.Codes.Add(new OpenNest.CNC.ArcMove(1, 1, 0, 1) { Layer = OpenNest.CNC.LayerType.Break });
var (restored, _) = RoundTrip(ArchiveBytes(drawing));
var moves = Assert.Single(restored.Drawings).Program.Codes.OfType<OpenNest.CNC.Motion>()
.Where(m => m is OpenNest.CNC.LinearMove { Layer: OpenNest.CNC.LayerType.Break }
or OpenNest.CNC.ArcMove { Layer: OpenNest.CNC.LayerType.Break });
Assert.Equal(2, moves.Count());
}
[Fact]
public void NoBreakoffs_AreOmittedFromTheFile()
{
var archive = ArchiveBytes(DrawingPackageFixture.Build());
Assert.False(NestJson(archive)["drawings"]![0]!.AsObject().ContainsKey("breakoffs"));
Assert.Empty(Assert.Single(RoundTrip(archive).Nest.Drawings).Breakoffs);
}
[Fact]
public void UnreadableBreakoff_IsDroppedWithAWarning_AndTheDrawingLoads()
{
var archive = ArchiveBytes(WithBreakoff());
var json = NestJson(archive);
json["drawings"]![0]!["breakoffs"]![0]!["tabWidth"] = 0;
var (restored, warnings) = RoundTrip(ReplaceNestJson(archive, json));
Assert.Empty(Assert.Single(restored.Drawings).Breakoffs);
Assert.Contains(warnings, w => w.Contains("breakoff 1 could not be read"));
}
}