Files
Print_server/Inspectron.Epson.TemplateEngine.Tests/LayoutEngineTests.cs
2026-02-03 14:27:13 +01:00

155 lines
4.2 KiB
C#

using Inspectron.Epson.TemplateEngine.Rendering;
namespace Inspectron.Epson.TemplateEngine.Tests;
public class LayoutEngineTests
{
private readonly LayoutEngine _engine = new();
[Fact]
public void AlignText_Center()
{
var result = _engine.AlignText("Hello", "center", 20);
Assert.Equal(" Hello", result);
}
[Fact]
public void AlignText_Right()
{
var result = _engine.AlignText("Hello", "right", 20);
Assert.Equal(" Hello", result);
}
[Fact]
public void AlignText_Left()
{
var result = _engine.AlignText("Hello", "left", 20);
Assert.Equal("Hello", result);
}
[Fact]
public void AlignText_TextExceedsWidth_NoChange()
{
var result = _engine.AlignText("Very long text", "center", 5);
Assert.Equal("Very long text", result);
}
[Fact]
public void FormatTwoColumns_BasicLayout()
{
var result = _engine.FormatTwoColumns("Left", "Right", 20);
Assert.Equal(20, result.Length);
Assert.StartsWith("Left", result);
Assert.EndsWith("Right", result);
}
[Fact]
public void FormatTwoColumnsWithWrap_ShortText_SingleLine()
{
var result = _engine.FormatTwoColumnsWithWrap("Left", "Right", 20);
Assert.Single(result);
Assert.Contains("Left", result[0]);
Assert.Contains("Right", result[0]);
}
[Fact]
public void FormatTwoColumnsWithWrap_LongLeft_MultipleLines()
{
var result = _engine.FormatTwoColumnsWithWrap(
"This is a very long left column text that needs wrapping",
"9.50",
30);
Assert.True(result.Count >= 1);
Assert.Contains("9.50", result[0]);
}
[Fact]
public void WrapText_ShortText_SingleLine()
{
var result = _engine.WrapText("Hello world", 20);
Assert.Single(result);
Assert.Equal("Hello world", result[0]);
}
[Fact]
public void WrapText_LongText_MultipleLines()
{
var result = _engine.WrapText("The quick brown fox jumps over the lazy dog", 20);
Assert.True(result.Count > 1);
foreach (var line in result)
{
Assert.True(line.TrimStart().Length <= 20);
}
}
[Fact]
public void WrapText_WithIndent()
{
var result = _engine.WrapText("The quick brown fox jumps over the lazy dog", 20, indent: 4);
Assert.True(result.Count > 1);
// First line no indent
Assert.False(result[0].StartsWith(" "));
// Subsequent lines indented
for (int i = 1; i < result.Count; i++)
{
Assert.StartsWith(" ", result[i]);
}
}
[Fact]
public void CreateSeparator()
{
var result = _engine.CreateSeparator('-', 42);
Assert.Equal(new string('-', 42), result);
}
[Fact]
public void CreateSeparator_CustomChar()
{
var result = _engine.CreateSeparator('*', 20);
Assert.Equal(new string('*', 20), result);
}
[Fact]
public void FormatMultiColumn_BasicLayout()
{
var columns = new List<(string text, int width, string align)>
{
("Col1", 10, "left"),
("Col2", 10, "right"),
("Col3", 10, "center")
};
var result = _engine.FormatMultiColumn(columns, 30);
Assert.Equal(30, result.Length);
}
[Fact]
public void FormatTable_BasicTable()
{
var columns = new List<(string text, int width, string align)>
{
("Name", 10, "left"),
("Value", 10, "right")
};
var headers = new List<List<string>> { new() { "Name", "Value" } };
var data = new List<List<string>>
{
new() { "Item1", "100" },
new() { "Item2", "200" }
};
var result = _engine.FormatTable(columns, headers, data, 23);
// Should have: top border, header row, separator, 2 data rows, bottom border
Assert.Equal(6, result.Count);
Assert.StartsWith("+", result[0]);
Assert.StartsWith("|", result[1]);
Assert.StartsWith("+", result[2]);
Assert.StartsWith("|", result[3]);
Assert.StartsWith("|", result[4]);
Assert.StartsWith("+", result[5]);
}
}