|
@@ -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}
|
|
|
+
|
|
|
+ """));
|
|
|
+ }
|
|
|
+}
|