22// The .NET Foundation licenses this file to you under the MIT license.
33
44using System ;
5+ using System . Text ;
56using Microsoft . Build . BackEnd . Logging ;
7+ using Microsoft . Build . Framework ;
68using Shouldly ;
79using Xunit ;
810
@@ -18,7 +20,7 @@ public class ConsoleOutputAlignerTests
1820 public void IndentBiggerThanBuffer_IndentedAndNotAligned ( string input , bool aligned )
1921 {
2022 string indent = " " ;
21- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : aligned ) ;
23+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : aligned , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
2224
2325 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : indent . Length ) ;
2426
@@ -30,7 +32,7 @@ public void IndentBiggerThanBuffer_IndentedAndNotAligned(string input, bool alig
3032 [ InlineData ( "12345" ) ]
3133 public void NoAlignNoIndent_NotAlignedEvenIfBiggerThanBuffer ( string input )
3234 {
33- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : false ) ;
35+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : false , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
3436
3537 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : 0 ) ;
3638
@@ -43,7 +45,7 @@ public void NoAlignNoIndent_NotAlignedEvenIfBiggerThanBuffer(string input)
4345 public void NoBufferWidthNoIndent_NotAligned ( int sizeOfMessage )
4446 {
4547 string input = new string ( '.' , sizeOfMessage ) ;
46- var aligner = new ConsoleOutputAligner ( bufferWidth : - 1 , alignMessages : false ) ;
48+ var aligner = new ConsoleOutputAligner ( bufferWidth : - 1 , alignMessages : false , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
4749
4850 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : 0 ) ;
4951
@@ -55,7 +57,7 @@ public void NoBufferWidthNoIndent_NotAligned(int sizeOfMessage)
5557 [ InlineData ( "12345" ) ]
5658 public void WithoutBufferWidthWithoutIndentWithAlign_NotIndentedAndNotAligned ( string input )
5759 {
58- var aligner = new ConsoleOutputAligner ( bufferWidth : - 1 , alignMessages : true ) ;
60+ var aligner = new ConsoleOutputAligner ( bufferWidth : - 1 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
5961
6062 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : 0 ) ;
6163
@@ -67,7 +69,7 @@ public void WithoutBufferWidthWithoutIndentWithAlign_NotIndentedAndNotAligned(st
6769 [ InlineData ( "12345" ) ]
6870 public void NoAlignPrefixAlreadyWritten_NotChanged ( string input )
6971 {
70- var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true ) ;
72+ var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
7173
7274 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 0 ) ;
7375
@@ -80,7 +82,7 @@ public void NoAlignPrefixAlreadyWritten_NotChanged(string input)
8082 [ InlineData ( " " , "1" ) ]
8183 public void SmallerThanBuffer_NotAligned ( string indent , string input )
8284 {
83- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
85+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
8486
8587 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : indent . Length ) ;
8688
@@ -93,7 +95,7 @@ public void SmallerThanBuffer_NotAligned(string indent, string input)
9395 [ InlineData ( " " , "12" , " 1" , " 2" ) ]
9496 public void BiggerThanBuffer_AlignedWithIndent ( string indent , string input , string expected1stLine , string expected2ndLine )
9597 {
96- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
98+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
9799
98100 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : indent . Length ) ;
99101
@@ -114,7 +116,7 @@ public void BiggerThanBuffer_AlignedWithIndent(string indent, string input, stri
114116 " 4\n " ) ]
115117 public void XTimesBiggerThanBuffer_AlignedToMultipleLines ( string indent , string input , string expected )
116118 {
117- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
119+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
118120
119121 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : indent . Length ) ;
120122
@@ -128,7 +130,7 @@ public void XTimesBiggerThanBuffer_AlignedToMultipleLines(string indent, string
128130 [ InlineData ( " " , "12" , "1" , " 2" ) ]
129131 public void BiggerThanBufferWithPrefixAlreadyWritten_AlignedWithIndentFromSecondLine ( string indent , string input , string expected1stLine , string expected2ndLine )
130132 {
131- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
133+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
132134
133135 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : indent . Length ) ;
134136
@@ -142,7 +144,7 @@ public void BiggerThanBufferWithPrefixAlreadyWritten_AlignedWithIndentFromSecond
142144 public void MultiLineWithoutAlign_NotChanged ( string input )
143145 {
144146 input = input . Replace ( "\n " , Environment . NewLine ) ;
145- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : false ) ;
147+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : false , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
146148
147149 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 0 ) ;
148150
@@ -165,7 +167,7 @@ public void NonStandardNewLines_AlignAsExpected(string input, string expected)
165167 {
166168 expected = expected . Replace ( "\n " , Environment . NewLine ) + Environment . NewLine ;
167169
168- var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true ) ;
170+ var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
169171
170172 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 2 ) ;
171173
@@ -179,7 +181,7 @@ public void NonStandardNewLines_AlignAsExpected(string input, string expected)
179181 public void ShortMultiLineWithAlign_NoChange ( string input )
180182 {
181183 input = input . Replace ( "\n " , Environment . NewLine ) ;
182- var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true ) ;
184+ var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
183185
184186 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 0 ) ;
185187
@@ -202,7 +204,7 @@ public void ShortMultiLineWithAlign_NoChange(string input)
202204 public void ShortMultiLineWithMixedNewLines_NewLinesReplacedByActualEnvironmentNewLines ( string input )
203205 {
204206 string expected = input . Replace ( "\r " , "" ) . Replace ( "\n " , Environment . NewLine ) + Environment . NewLine ;
205- var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true ) ;
207+ var aligner = new ConsoleOutputAligner ( bufferWidth : 10 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
206208
207209 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 0 ) ;
208210
@@ -217,7 +219,7 @@ public void MultiLineWithPrefixAlreadyWritten(string prefix, string input, strin
217219 {
218220 input = input . Replace ( "\n " , Environment . NewLine ) ;
219221 expected = expected . Replace ( "\n " , Environment . NewLine ) ;
220- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
222+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
221223
222224 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : prefix . Length ) ;
223225
@@ -231,7 +233,7 @@ public void MultiLineWithoutPrefixAlreadyWritten(string prefix, string input, st
231233 {
232234 input = input . Replace ( "\n " , Environment . NewLine ) ;
233235 expected = expected . Replace ( "\n " , Environment . NewLine ) ;
234- var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true ) ;
236+ var aligner = new ConsoleOutputAligner ( bufferWidth : 4 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
235237
236238 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : false , prefixWidth : prefix . Length ) ;
237239
@@ -244,7 +246,7 @@ public void MultiLineWithoutPrefixAlreadyWritten(string prefix, string input, st
244246 public void ShortTextWithTabs_NoChange ( string input )
245247 {
246248 input = input . Replace ( "\n " , Environment . NewLine ) ;
247- var aligner = new ConsoleOutputAligner ( bufferWidth : 50 , alignMessages : true ) ;
249+ var aligner = new ConsoleOutputAligner ( bufferWidth : 50 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
248250
249251 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : true , prefixWidth : 0 ) ;
250252
@@ -259,7 +261,7 @@ public void ShortTextWithTabs_NoChange(string input)
259261 public void LastTabOverLimit_NoChange ( string prefix , string input , int bufferWidthWithoutNewLine , bool prefixAlreadyWritten )
260262 {
261263 input = input . Replace ( "\n " , Environment . NewLine ) ;
262- var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true ) ;
264+ var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
263265
264266 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : prefixAlreadyWritten , prefixWidth : prefix . Length ) ;
265267
@@ -274,7 +276,7 @@ public void LastTabOverLimit_NoChange(string prefix, string input, int bufferWid
274276 public void LastTabAtLimit_NoChange ( string prefix , string input , int bufferWidthWithoutNewLine , bool prefixAlreadyWritten )
275277 {
276278 input = input . Replace ( "\n " , Environment . NewLine ) ;
277- var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true ) ;
279+ var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
278280
279281 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : prefixAlreadyWritten , prefixWidth : prefix . Length ) ;
280282
@@ -289,7 +291,7 @@ public void LastTabAtLimit_NoChange(string prefix, string input, int bufferWidth
289291 public void TabsMakesItJustOverLimit_IndentAndAlign ( string prefix , string input , int bufferWidthWithoutNewLine , bool prefixAlreadyWritten )
290292 {
291293 input = input . Replace ( "\n " , Environment . NewLine ) ;
292- var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true ) ;
294+ var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
293295
294296 string output = aligner . AlignConsoleOutput ( message : input + "x" , prefixAlreadyWritten : prefixAlreadyWritten , prefixWidth : prefix . Length ) ;
295297
@@ -366,11 +368,17 @@ public void MultiLinesOverLimit_IndentAndAlign(string prefix, string input, stri
366368 {
367369 input = input . Replace ( "\n " , Environment . NewLine ) ;
368370 expected = expected . Replace ( "\n " , Environment . NewLine ) ;
369- var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true ) ;
371+ var aligner = new ConsoleOutputAligner ( bufferWidth : bufferWidthWithoutNewLine + 1 , alignMessages : true , stringBuilderProvider : new TestStringBuilderProvider ( ) ) ;
370372
371373 string output = aligner . AlignConsoleOutput ( message : input , prefixAlreadyWritten : prefixAlreadyWritten , prefixWidth : prefix . Length ) ;
372374
373375 output . ShouldBe ( expected ) ;
374376 }
377+
378+ private sealed class TestStringBuilderProvider : IReusableStringBuilderProvider
379+ {
380+ public StringBuilder Acquire ( int capacity ) => new StringBuilder ( capacity ) ;
381+ public string GetStringAndRelease ( StringBuilder builder ) => builder . ToString ( ) ;
382+ }
375383 }
376384}
0 commit comments