Files
OpenNest/OpenNest.Tests/Cincinnati/ProgramVariableManagerTests.cs
AJ Isaacs 5936272ce4 refactor: move ProgramVariableManager to Core, add config file support
- Move ProgramVariable and ProgramVariableManager from
  OpenNest.Posts.Cincinnati to OpenNest.Core/CNC (namespace OpenNest.CNC)
  so they can be used internally in nest programs
- Add parameterless constructor to CincinnatiPostProcessor that loads
  config from a .json file next to the DLL (creates defaults on first run)
- Enums serialize as readable strings (e.g., "Inches", "ControllerSide")
- Config file: OpenNest.Posts.Cincinnati.json in the Posts/ directory

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 00:08:31 -04:00

72 lines
1.9 KiB
C#

using OpenNest.CNC;
namespace OpenNest.Tests.Cincinnati;
public class ProgramVariableManagerTests
{
[Fact]
public void GetOrCreate_ReturnsNewVariable()
{
var mgr = new ProgramVariableManager();
var v = mgr.GetOrCreate("LeadInFeedrate", 126);
Assert.Equal(126, v.Number);
Assert.Equal("LeadInFeedrate", v.Name);
}
[Fact]
public void GetOrCreate_ReturnsSameVariable_WhenCalledTwice()
{
var mgr = new ProgramVariableManager();
var v1 = mgr.GetOrCreate("LeadInFeedrate", 126);
var v2 = mgr.GetOrCreate("LeadInFeedrate", 126);
Assert.Same(v1, v2);
}
[Fact]
public void GetOrCreate_WithExpression_SetsExpression()
{
var mgr = new ProgramVariableManager();
var v = mgr.GetOrCreate("LeadInFeedrate", 126, "[#148*0.5]");
Assert.Equal("[#148*0.5]", v.Expression);
}
[Fact]
public void GetOrCreate_WithLiteral_SetsExpression()
{
var mgr = new ProgramVariableManager();
var v = mgr.GetOrCreate("CircleFeedrate", 128, ".8");
Assert.Equal(".8", v.Expression);
}
[Fact]
public void Reference_ReturnsHashNumber()
{
var v = new ProgramVariable(126, "LeadInFeedrate");
Assert.Equal("#126", v.Reference);
}
[Fact]
public void EmitDeclarations_ProducesCorrectLines()
{
var mgr = new ProgramVariableManager();
mgr.GetOrCreate("LeadInFeedrate", 126, "[#148*0.5]");
mgr.GetOrCreate("CircleFeedrate", 128, ".8");
var lines = mgr.EmitDeclarations();
Assert.Contains("#126=[#148*0.5] (LEAD IN FEEDRATE)", lines);
Assert.Contains("#128=.8 (CIRCLE FEEDRATE)", lines);
}
[Fact]
public void EmitDeclarations_SkipsVariablesWithNoExpression()
{
var mgr = new ProgramVariableManager();
mgr.GetOrCreate("ProcessFeedrate", 148);
var lines = mgr.EmitDeclarations();
Assert.Empty(lines);
}
}