@@ -6,159 +6,136 @@ namespace AWS.Lambda.Powertools.Common.Tests;
66
77public class ConsoleWrapperTests : IDisposable
88{
9+ private StringWriter _writer ;
10+
11+ public ConsoleWrapperTests ( )
12+ {
13+ // Setup a new StringWriter for each test
14+ _writer = new StringWriter ( ) ;
15+ // Reset static state for clean testing
16+ ConsoleWrapper . ResetForTest ( ) ;
17+ }
18+
919 [ Fact ]
1020 public void WriteLine_Should_Write_To_Console ( )
1121 {
1222 // Arrange
1323 var consoleWrapper = new ConsoleWrapper ( ) ;
14- var writer = new StringWriter ( ) ;
15- ConsoleWrapper . SetOut ( writer ) ;
24+ ConsoleWrapper . SetOut ( _writer ) ;
1625
1726 // Act
1827 consoleWrapper . WriteLine ( "test message" ) ;
1928
2029 // Assert
21- Assert . Equal ( $ "test message{ Environment . NewLine } ", writer . ToString ( ) ) ;
30+ Assert . Equal ( $ "test message{ Environment . NewLine } ", _writer . ToString ( ) ) ;
2231 }
2332
2433 [ Fact ]
2534 public void Error_Should_Write_To_Error_Console ( )
2635 {
2736 // Arrange
2837 var consoleWrapper = new ConsoleWrapper ( ) ;
29- var writer = new StringWriter ( ) ;
30- ConsoleWrapper . SetOut ( writer ) ;
31- Console . SetError ( writer ) ;
38+ ConsoleWrapper . SetOut ( _writer ) ;
39+ Console . SetError ( _writer ) ;
3240
3341 // Act
3442 consoleWrapper . Error ( "error message" ) ;
35- writer . Flush ( ) ;
43+ _writer . Flush ( ) ;
3644
3745 // Assert
38- Assert . Equal ( $ "error message{ Environment . NewLine } ", writer . ToString ( ) ) ;
46+ Assert . Equal ( $ "error message{ Environment . NewLine } ", _writer . ToString ( ) ) ;
3947 }
4048
4149 [ Fact ]
4250 public void SetOut_Should_Override_Console_Output ( )
4351 {
4452 // Arrange
4553 var consoleWrapper = new ConsoleWrapper ( ) ;
46- var writer = new StringWriter ( ) ;
47- ConsoleWrapper . SetOut ( writer ) ;
54+ ConsoleWrapper . SetOut ( _writer ) ;
4855
4956 // Act
5057 consoleWrapper . WriteLine ( "test message" ) ;
5158
5259 // Assert
53- Assert . Equal ( $ "test message{ Environment . NewLine } ", writer . ToString ( ) ) ;
60+ Assert . Equal ( $ "test message{ Environment . NewLine } ", _writer . ToString ( ) ) ;
5461 }
5562
5663 [ Fact ]
5764 public void OverrideLambdaLogger_Should_Override_Console_Out ( )
5865 {
59- // Arrange
60- var originalOut = Console . Out ;
61- try
62- {
63- var consoleWrapper = new ConsoleWrapper ( ) ;
64-
65- // Act - create a custom StringWriter and set it after constructor
66- // but before WriteLine (which triggers OverrideLambdaLogger)
67- var writer = new StringWriter ( ) ;
68- ConsoleWrapper . SetOut ( writer ) ;
69-
70- consoleWrapper . WriteLine ( "test message" ) ;
71-
72- // Assert
73- Assert . Equal ( $ "test message{ Environment . NewLine } ", writer . ToString ( ) ) ;
74- }
75- finally
76- {
77- // Restore original console out
78- ConsoleWrapper . ResetForTest ( ) ;
79- }
66+ // Arrange
67+ var consoleWrapper = new ConsoleWrapper ( ) ;
68+ ConsoleWrapper . SetOut ( _writer ) ;
69+
70+ // Act
71+ consoleWrapper . WriteLine ( "test message" ) ;
72+
73+ // Assert
74+ Assert . Equal ( $ "test message{ Environment . NewLine } ", _writer . ToString ( ) ) ;
75+ }
76+
77+ [ Fact ]
78+ public void WriteLine_WritesMessageToConsole ( )
79+ {
80+ // Arrange
81+ var consoleWrapper = new ConsoleWrapper ( ) ;
82+ ConsoleWrapper . SetOut ( _writer ) ;
83+
84+ // Act
85+ consoleWrapper . WriteLine ( "Test message" ) ;
86+
87+ // Assert
88+ var output = _writer . ToString ( ) ;
89+ Assert . Contains ( "Test message" , output ) ;
90+ }
91+
92+ [ Fact ]
93+ public void SetOut_OverridesConsoleOutput ( )
94+ {
95+ // Act
96+ ConsoleWrapper . SetOut ( _writer ) ;
97+ Console . WriteLine ( "Test override" ) ;
98+
99+ // Assert
100+ var output = _writer . ToString ( ) ;
101+ Assert . Contains ( "Test override" , output ) ;
80102 }
81-
103+
82104 [ Fact ]
83- public void WriteLine_WritesMessageToConsole ( )
84- {
85- // Arrange
86- var consoleWrapper = new ConsoleWrapper ( ) ;
87- var originalOutput = Console . Out ;
88- using var stringWriter = new StringWriter ( ) ;
89- ConsoleWrapper . SetOut ( stringWriter ) ;
90-
91- try
92- {
93- // Act
94- consoleWrapper . WriteLine ( "Test message" ) ;
95-
96- // Assert
97- var output = stringWriter . ToString ( ) ;
98- Assert . Contains ( "Test message" , output ) ;
99- }
100- finally
101- {
102- // Restore original output
103- ConsoleWrapper . ResetForTest ( ) ;
104- }
105- }
105+ public void StaticWriteLine_FormatsLogMessageCorrectly ( )
106+ {
107+ // Arrange
108+ ConsoleWrapper . SetOut ( _writer ) ;
109+
110+ // Act - Using reflection to call internal static method
111+ typeof ( ConsoleWrapper )
112+ . GetMethod ( "WriteLine" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static , null , new [ ] { typeof ( string ) , typeof ( string ) } , null )
113+ ? . Invoke ( null , new object [ ] { "INFO" , "Test log message" } ) ;
114+
115+ // Assert
116+ var output = _writer . ToString ( ) ;
117+ Assert . Matches ( @"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z\tINFO\tTest log message" , output ) ;
118+ }
119+
120+ [ Fact ]
121+ public void ClearOutputResetFlag_ResetsFlag ( )
122+ {
123+ // Arrange
124+ var consoleWrapper = new ConsoleWrapper ( ) ;
125+ ConsoleWrapper . SetOut ( _writer ) ;
106126
107- [ Fact ]
108- public void SetOut_OverridesConsoleOutput ( )
109- {
110- // Arrange
111- var originalOutput = Console . Out ;
112- using var stringWriter = new StringWriter ( ) ;
113-
114- try
115- {
116- // Act
117- typeof ( ConsoleWrapper )
118- . GetMethod ( "SetOut" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static )
119- ? . Invoke ( null , new object [ ] { stringWriter } ) ;
120-
121- Console . WriteLine ( "Test override" ) ;
122-
123- // Assert
124- var output = stringWriter . ToString ( ) ;
125- Assert . Contains ( "Test override" , output ) ;
126- }
127- finally
128- {
129- // Restore original output
130- ConsoleWrapper . ResetForTest ( ) ;
131- }
132- }
127+ // Act
128+ consoleWrapper . WriteLine ( "First message" ) ; // Should set the reset flag
129+ ConsoleWrapper . ClearOutputResetFlag ( ) ;
130+ consoleWrapper . WriteLine ( "Second message" ) ; // Should set it again
133131
134- [ Fact ]
135- public void StaticWriteLine_FormatsLogMessageCorrectly ( )
136- {
137- // Arrange
138- var originalOutput = Console . Out ;
139- using var stringWriter = new StringWriter ( ) ;
140- ConsoleWrapper . SetOut ( stringWriter ) ;
141-
142- try
143- {
144- // Act
145- typeof ( ConsoleWrapper )
146- . GetMethod ( "WriteLine" , System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static , null , new [ ] { typeof ( string ) , typeof ( string ) } , null )
147- ? . Invoke ( null , new object [ ] { "INFO" , "Test log message" } ) ;
148-
149- // Assert
150- var output = stringWriter . ToString ( ) ;
151- Assert . Matches ( @"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z\tINFO\tTest log message" , output ) ;
152- }
153- finally
154- {
155- // Restore original output
156- ConsoleWrapper . ResetForTest ( ) ;
157- }
158- }
159-
160- public void Dispose ( )
161- {
162- ConsoleWrapper . ResetForTest ( ) ;
163- }
132+ // Assert
133+ Assert . Equal ( $ "First message{ Environment . NewLine } Second message{ Environment . NewLine } ", _writer . ToString ( ) ) ;
134+ }
135+
136+ public void Dispose ( )
137+ {
138+ ConsoleWrapper . ResetForTest ( ) ;
139+ _writer ? . Dispose ( ) ;
140+ }
164141}
0 commit comments