mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-04 12:31:35 -05:00
Cutting-planning, diagnostics and fill tests drew the same circles, squares, clockwise rectangles, closed polygons, rounded rectangles and right-midpoint rectangle contours in private helpers. They now use TestHelpers; files whose helper had its own default size keep a one-line wrapper for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
105 lines
4.2 KiB
C#
105 lines
4.2 KiB
C#
using OpenNest.CNC;
|
|
using OpenNest.Diagnostics;
|
|
using OpenNest.Geometry;
|
|
using static OpenNest.Tests.TestHelpers;
|
|
|
|
namespace OpenNest.Tests.Diagnostics;
|
|
|
|
public class OverlapAutoCheckSchedulerTests
|
|
{
|
|
[Fact]
|
|
public void ChecksOnlyAfterTheLayoutStaysQuietForAWholePeriod()
|
|
{
|
|
var plate = PlateWithParts();
|
|
var state = new OverlapReportState();
|
|
var scheduler = new OverlapAutoCheckScheduler();
|
|
|
|
Assert.True(scheduler.Observe(plate, state)); // NotChecked: start the timer
|
|
Assert.False(scheduler.Observe(plate, state)); // repaint without change: leave it running
|
|
plate.Parts[0].Offset(1, 0); // drag step
|
|
Assert.True(scheduler.Observe(plate, state)); // restart the quiet period
|
|
plate.Parts[0].Offset(1, 0); // moved again, not yet observed
|
|
Assert.Equal(OverlapAutoCheckStep.Wait, scheduler.Elapsed(plate, state, interactionActive: false));
|
|
Assert.Equal(OverlapAutoCheckStep.Check, scheduler.Elapsed(plate, state, interactionActive: false));
|
|
Assert.False(scheduler.IsWaiting);
|
|
}
|
|
|
|
[Fact]
|
|
public void WaitsWhileAnInteractionIsActive()
|
|
{
|
|
var plate = PlateWithParts();
|
|
var state = new OverlapReportState();
|
|
var scheduler = new OverlapAutoCheckScheduler();
|
|
scheduler.Observe(plate, state);
|
|
Assert.Equal(OverlapAutoCheckStep.Wait, scheduler.Elapsed(plate, state, interactionActive: true));
|
|
Assert.Equal(OverlapAutoCheckStep.Check, scheduler.Elapsed(plate, state, interactionActive: false));
|
|
}
|
|
|
|
[Fact]
|
|
public void CurrentOrRunningChecksNeedNoAutomaticRequest()
|
|
{
|
|
var plate = PlateWithParts();
|
|
var state = new OverlapReportState();
|
|
var scheduler = new OverlapAutoCheckScheduler();
|
|
scheduler.Observe(plate, state);
|
|
var request = state.Begin(plate);
|
|
scheduler.Started(plate);
|
|
Assert.False(scheduler.Observe(plate, state));
|
|
Assert.Equal(OverlapAutoCheckStep.None, scheduler.Elapsed(plate, state, false));
|
|
Assert.True(state.TryPublish(request, plate, PlateOverlapAnalyzer.Analyze(plate.Parts.ToArray())));
|
|
Assert.False(scheduler.Observe(plate, state));
|
|
|
|
plate.Parts[1].Offset(0, 3);
|
|
state.EnsureFresh(plate); // Stale after the edit
|
|
Assert.True(scheduler.Observe(plate, state));
|
|
Assert.Equal(OverlapAutoCheckStep.Check, scheduler.Elapsed(plate, state, false));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(true)]
|
|
[InlineData(false)]
|
|
public void CanceledOrFailedLayoutIsNotRetriedUntilItChanges(bool cancel)
|
|
{
|
|
var plate = PlateWithParts();
|
|
var state = new OverlapReportState();
|
|
var scheduler = new OverlapAutoCheckScheduler();
|
|
var request = state.Begin(plate);
|
|
scheduler.Started(plate);
|
|
if (cancel)
|
|
state.Cancel();
|
|
else
|
|
Assert.True(state.TryFail(request, plate));
|
|
|
|
Assert.False(scheduler.Observe(plate, state)); // respect the cancel / avoid a failure loop
|
|
Assert.Equal(OverlapAutoCheckStep.None, scheduler.Elapsed(plate, state, false));
|
|
plate.Parts[0].Offset(0.5, 0);
|
|
Assert.True(scheduler.Observe(plate, state));
|
|
Assert.Equal(OverlapAutoCheckStep.Check, scheduler.Elapsed(plate, state, false));
|
|
}
|
|
|
|
[Fact]
|
|
public void ResetForgetsPendingWorkAndPreviousRequests()
|
|
{
|
|
var plate = PlateWithParts();
|
|
var state = new OverlapReportState();
|
|
var scheduler = new OverlapAutoCheckScheduler();
|
|
state.Begin(plate);
|
|
scheduler.Started(plate);
|
|
state.Cancel();
|
|
scheduler.Reset();
|
|
Assert.True(scheduler.Observe(plate, state)); // a new document/plate may check again
|
|
scheduler.Reset();
|
|
Assert.False(scheduler.IsWaiting);
|
|
Assert.Equal(OverlapAutoCheckStep.None, scheduler.Elapsed(plate, state, false));
|
|
Assert.False(scheduler.Observe(null, state));
|
|
}
|
|
|
|
private static Plate PlateWithParts()
|
|
{
|
|
var plate = new Plate();
|
|
plate.Parts.Add(MakeSquarePart("same name"));
|
|
plate.Parts.Add(MakeSquarePart("same name"));
|
|
return plate;
|
|
}
|
|
}
|