Brandon Thetford 1 год назад
Родитель
Сommit
9d650b0f7d

+ 111 - 0
Analyzers/Terminal.Gui.Analyzers.Internal.Tests/IndentedTextWriterExtensionsTests.cs

@@ -0,0 +1,111 @@
+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}
+
+                                  """));
+    }
+}