mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
151 lines
3.9 KiB
C#
151 lines
3.9 KiB
C#
using System.Drawing;
|
|
using Terminal.Gui.Text;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace Terminal.Gui.TextTests;
|
|
|
|
/// <summary>
|
|
/// Tests for the new TextFormatter architecture that separates formatting from rendering.
|
|
/// </summary>
|
|
public class TextFormatterNewArchitectureTests
|
|
{
|
|
private readonly ITestOutputHelper _output;
|
|
|
|
public TextFormatterNewArchitectureTests(ITestOutputHelper output)
|
|
{
|
|
_output = output;
|
|
}
|
|
|
|
[Fact]
|
|
public void TextFormatter_NewArchitecture_BasicFormatting_Works()
|
|
{
|
|
Application.Init(new FakeDriver());
|
|
|
|
var tf = new TextFormatter
|
|
{
|
|
Text = "Hello World"
|
|
};
|
|
|
|
// Test the new architecture method
|
|
Size size = tf.GetFormattedSizeWithNewArchitecture();
|
|
|
|
Assert.True(size.Width > 0);
|
|
Assert.True(size.Height > 0);
|
|
|
|
Application.Shutdown();
|
|
}
|
|
|
|
[Fact]
|
|
public void TextFormatter_NewArchitecture_WithAlignment_Works()
|
|
{
|
|
Application.Init(new FakeDriver());
|
|
|
|
var tf = new TextFormatter
|
|
{
|
|
Text = "Hello World",
|
|
Alignment = Alignment.Center,
|
|
VerticalAlignment = Alignment.Center
|
|
};
|
|
|
|
// Test that properties are synchronized
|
|
Size size = tf.GetFormattedSizeWithNewArchitecture();
|
|
|
|
Assert.True(size.Width > 0);
|
|
Assert.True(size.Height > 0);
|
|
|
|
Application.Shutdown();
|
|
}
|
|
|
|
[Fact]
|
|
public void TextFormatter_NewArchitecture_Performance_IsBetter()
|
|
{
|
|
Application.Init(new FakeDriver());
|
|
|
|
var tf = new TextFormatter
|
|
{
|
|
Text = "This is a long text that will be formatted multiple times to test performance improvements"
|
|
};
|
|
|
|
// Warm up
|
|
tf.GetFormattedSizeWithNewArchitecture();
|
|
|
|
// Test multiple calls - should use caching
|
|
var sw = System.Diagnostics.Stopwatch.StartNew();
|
|
for (int i = 0; i < 100; i++)
|
|
{
|
|
tf.GetFormattedSizeWithNewArchitecture();
|
|
}
|
|
sw.Stop();
|
|
|
|
_output.WriteLine($"New architecture: 100 calls took {sw.ElapsedMilliseconds}ms");
|
|
|
|
// The new architecture should be fast due to caching
|
|
Assert.True(sw.ElapsedMilliseconds < 100, "New architecture should be fast due to caching");
|
|
|
|
Application.Shutdown();
|
|
}
|
|
|
|
[Fact]
|
|
public void TextFormatter_NewArchitecture_DrawRegion_Works()
|
|
{
|
|
Application.Init(new FakeDriver());
|
|
|
|
var tf = new TextFormatter
|
|
{
|
|
Text = "Hello\nWorld"
|
|
};
|
|
|
|
Region region = tf.GetDrawRegionWithNewArchitecture(new Rectangle(0, 0, 10, 10));
|
|
|
|
Assert.NotNull(region);
|
|
|
|
Application.Shutdown();
|
|
}
|
|
|
|
[Fact]
|
|
public void StandardTextFormatter_DirectlyUsed_Works()
|
|
{
|
|
var formatter = new StandardTextFormatter
|
|
{
|
|
Text = "Test Text",
|
|
Alignment = Alignment.Center
|
|
};
|
|
|
|
FormattedText result = formatter.Format();
|
|
|
|
Assert.NotNull(result);
|
|
Assert.NotEmpty(result.Lines);
|
|
Assert.True(result.RequiredSize.Width > 0);
|
|
Assert.True(result.RequiredSize.Height > 0);
|
|
}
|
|
|
|
[Fact]
|
|
public void StandardTextRenderer_DirectlyUsed_Works()
|
|
{
|
|
Application.Init(new FakeDriver());
|
|
|
|
var formatter = new StandardTextFormatter
|
|
{
|
|
Text = "Test Text"
|
|
};
|
|
|
|
var renderer = new StandardTextRenderer();
|
|
FormattedText formattedText = formatter.Format();
|
|
|
|
// Should not throw
|
|
renderer.Draw(
|
|
formattedText,
|
|
new Rectangle(0, 0, 10, 1),
|
|
Attribute.Default,
|
|
Attribute.Default);
|
|
|
|
Region region = renderer.GetDrawRegion(
|
|
formattedText,
|
|
new Rectangle(0, 0, 10, 1));
|
|
|
|
Assert.NotNull(region);
|
|
|
|
Application.Shutdown();
|
|
}
|
|
} |