IndentedTextWriterExtensionsTests.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System.CodeDom.Compiler;
  2. using System.Text;
  3. namespace Terminal.Gui.Analyzers.Internal.Tests;
  4. [TestFixture]
  5. [Category ("Extension Methods")]
  6. [TestOf (typeof (IndentedTextWriterExtensions))]
  7. [Parallelizable (ParallelScope.Children)]
  8. public class IndentedTextWriterExtensionsTests
  9. {
  10. [Test]
  11. public void Pop_Decrements ()
  12. {
  13. StringBuilder sb = new (0);
  14. using var sw = new StringWriter (sb);
  15. using var writer = new IndentedTextWriter (sw);
  16. writer.Indent = 5;
  17. Assume.That (writer.Indent, Is.EqualTo (5));
  18. writer.Pop ();
  19. Assert.That (writer.Indent, Is.EqualTo (4));
  20. }
  21. [Test]
  22. public void Pop_WithClosing_WritesAndPops ([Values ("}", ")", "]")] string scopeClosing)
  23. {
  24. StringBuilder sb = new (256);
  25. using var sw = new StringWriter (sb);
  26. using var writer = new IndentedTextWriter (sw, " ");
  27. writer.Indent = 5;
  28. writer.Flush ();
  29. Assume.That (writer.Indent, Is.EqualTo (5));
  30. Assume.That (sb.Length, Is.Zero);
  31. // Need to write something first, or IndentedTextWriter won't emit the indentation for the first call.
  32. // So we'll write an empty line.
  33. writer.WriteLine ();
  34. for (ushort indentCount = 5; indentCount > 0;)
  35. {
  36. writer.Pop (scopeClosing);
  37. Assert.That (writer.Indent, Is.EqualTo (--indentCount));
  38. }
  39. writer.Flush ();
  40. var result = sb.ToString ();
  41. Assert.That (
  42. result,
  43. Is.EqualTo (
  44. $"""
  45. {scopeClosing}
  46. {scopeClosing}
  47. {scopeClosing}
  48. {scopeClosing}
  49. {scopeClosing}
  50. """));
  51. }
  52. [Test]
  53. public void Push_Increments ()
  54. {
  55. StringBuilder sb = new (32);
  56. using var sw = new StringWriter (sb);
  57. using var writer = new IndentedTextWriter (sw, " ");
  58. for (int indentCount = 0; indentCount < 5; indentCount++)
  59. {
  60. writer.Push ();
  61. Assert.That (writer.Indent, Is.EqualTo (indentCount + 1));
  62. }
  63. }
  64. [Test]
  65. public void Push_WithOpening_WritesAndPushes ([Values ('{', '(', '[')] char scopeOpening)
  66. {
  67. StringBuilder sb = new (256);
  68. using var sw = new StringWriter (sb);
  69. using var writer = new IndentedTextWriter (sw, " ");
  70. for (ushort indentCount = 0; indentCount < 5;)
  71. {
  72. writer.Push ("Opening UninterestingEnum", scopeOpening);
  73. Assert.That (writer.Indent, Is.EqualTo (++indentCount));
  74. }
  75. writer.Flush ();
  76. var result = sb.ToString ();
  77. Assert.That (
  78. result,
  79. Is.EqualTo (
  80. $"""
  81. Opening UninterestingEnum
  82. {scopeOpening}
  83. Opening UninterestingEnum
  84. {scopeOpening}
  85. Opening UninterestingEnum
  86. {scopeOpening}
  87. Opening UninterestingEnum
  88. {scopeOpening}
  89. Opening UninterestingEnum
  90. {scopeOpening}
  91. """));
  92. }
  93. }