feat(engine): add NestingEngineRegistry for whole-job INestingEngine plugin discovery

This commit is contained in:
aj
2026-09-19 08:15:40 -04:00
parent ecca71e185
commit ae704478af
3 changed files with 161 additions and 0 deletions
@@ -0,0 +1,49 @@
using Xunit;
namespace OpenNest.Engine.Tests.Jobs;
public class NestingEngineRegistryTests
{
[Fact]
public void BuiltInStrategiesAreRegistered()
{
var names = NestingEngineRegistry.AvailableEngines.Select(e => e.Name).ToList();
Assert.Contains("Default", names);
Assert.Contains("Strip", names);
Assert.Contains("Vertical Remnant", names);
Assert.Contains("Horizontal Remnant", names);
}
[Fact]
public void EachBuiltInFactoryProducesAWorkingEngine()
{
foreach (var info in NestingEngineRegistry.AvailableEngines)
{
var engine = info.Factory();
var result = engine.Solve(FiniteStockJobTests.Job(1));
Assert.Equal(NestJobStatus.Complete, result.Status);
}
}
[Fact]
public void DuplicateNameIsSkipped()
{
var before = NestingEngineRegistry.AvailableEngines.Count;
NestingEngineRegistry.Register("Default", "duplicate", () => new FixedStrategyNestingEngine("Default"));
Assert.Equal(before, NestingEngineRegistry.AvailableEngines.Count);
}
[Fact]
public void LoadPluginsAgainstMissingDirectoryIsANoOp()
{
var before = NestingEngineRegistry.AvailableEngines.Count;
NestingEngineRegistry.LoadPlugins(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));
Assert.Equal(before, NestingEngineRegistry.AvailableEngines.Count);
}
}