mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
112 lines
3.5 KiB
C#
112 lines
3.5 KiB
C#
using System.CodeDom.Compiler;
|
|
using System.Text;
|
|
|
|
namespace Terminal.Gui.Analyzers.Internal.Tests;
|
|
|
|
[TestFixture]
|
|
[Category ("Extension Methods")]
|
|
[TestOf (typeof (IndentedTextWriterExtensions))]
|
|
[Parallelizable (ParallelScope.Children)]
|
|
public class IndentedTextWriterExtensionsTests
|
|
{
|
|
[Test]
|
|
public void Pop_Decrements ()
|
|
{
|
|
StringBuilder sb = new (0);
|
|
using var sw = new StringWriter (sb);
|
|
using var writer = new IndentedTextWriter (sw);
|
|
writer.Indent = 5;
|
|
|
|
Assume.That (writer.Indent, Is.EqualTo (5));
|
|
|
|
writer.Pop ();
|
|
Assert.That (writer.Indent, Is.EqualTo (4));
|
|
}
|
|
|
|
[Test]
|
|
public void Pop_WithClosing_WritesAndPops ([Values ("}", ")", "]")] string scopeClosing)
|
|
{
|
|
StringBuilder sb = new (256);
|
|
using var sw = new StringWriter (sb);
|
|
using var writer = new IndentedTextWriter (sw, " ");
|
|
writer.Indent = 5;
|
|
writer.Flush ();
|
|
Assume.That (writer.Indent, Is.EqualTo (5));
|
|
Assume.That (sb.Length, Is.Zero);
|
|
|
|
// Need to write something first, or IndentedTextWriter won't emit the indentation for the first call.
|
|
// So we'll write an empty line.
|
|
writer.WriteLine ();
|
|
|
|
for (ushort indentCount = 5; indentCount > 0;)
|
|
{
|
|
writer.Pop (scopeClosing);
|
|
Assert.That (writer.Indent, Is.EqualTo (--indentCount));
|
|
}
|
|
|
|
writer.Flush ();
|
|
var result = sb.ToString ();
|
|
|
|
Assert.That (
|
|
result,
|
|
Is.EqualTo (
|
|
$"""
|
|
|
|
{scopeClosing}
|
|
{scopeClosing}
|
|
{scopeClosing}
|
|
{scopeClosing}
|
|
{scopeClosing}
|
|
|
|
"""));
|
|
}
|
|
|
|
[Test]
|
|
public void Push_Increments ()
|
|
{
|
|
StringBuilder sb = new (32);
|
|
using var sw = new StringWriter (sb);
|
|
using var writer = new IndentedTextWriter (sw, " ");
|
|
|
|
for (int indentCount = 0; indentCount < 5; indentCount++)
|
|
{
|
|
writer.Push ();
|
|
Assert.That (writer.Indent, Is.EqualTo (indentCount + 1));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Push_WithOpening_WritesAndPushes ([Values ('{', '(', '[')] char scopeOpening)
|
|
{
|
|
StringBuilder sb = new (256);
|
|
using var sw = new StringWriter (sb);
|
|
using var writer = new IndentedTextWriter (sw, " ");
|
|
|
|
for (ushort indentCount = 0; indentCount < 5;)
|
|
{
|
|
writer.Push ("Opening UninterestingEnum", scopeOpening);
|
|
Assert.That (writer.Indent, Is.EqualTo (++indentCount));
|
|
}
|
|
|
|
writer.Flush ();
|
|
var result = sb.ToString ();
|
|
|
|
Assert.That (
|
|
result,
|
|
Is.EqualTo (
|
|
$"""
|
|
Opening UninterestingEnum
|
|
{scopeOpening}
|
|
Opening UninterestingEnum
|
|
{scopeOpening}
|
|
Opening UninterestingEnum
|
|
{scopeOpening}
|
|
Opening UninterestingEnum
|
|
{scopeOpening}
|
|
Opening UninterestingEnum
|
|
{scopeOpening}
|
|
|
|
"""));
|
|
}
|
|
}
|