@@ -78,17 +78,41 @@ public void ShouldRespectQuietMode_AndStillWriteFile()
7878 [ Fact ]
7979 public void ShouldTruncateLog_WhenExceedsOneMB ( )
8080 {
81- // Arrange — create a large dummy log file
82- var largeLines = string . Join ( Environment . NewLine , Enumerable . Repeat ( "X" , 150000 ) ) ;
83- File . WriteAllText ( _logFile , largeLines ) ;
81+ // Keep console quiet so file I/O is deterministic
82+ Logger . QuietMode = true ;
8483
85- // Act
84+ // Build a log file just over 1 MB with MANY numbered lines
85+ // so File.ReadAllLines(...) returns a large array we can verify.
86+ var payload = new string ( 'X' , 80 ) ;
87+ using ( var sw = new StreamWriter ( _logFile , false ) )
88+ {
89+ int i = 0 ;
90+ while ( new FileInfo ( _logFile ) . Length <= 1_050_000 ) // a bit above 1MB to guarantee the branch
91+ {
92+ sw . WriteLine ( $ "LINE { i : D6} { payload } ") ;
93+ i ++ ;
94+ if ( i % 1000 == 0 ) sw . Flush ( ) ; // help file size update during loop
95+ }
96+ }
97+
98+ var beforeLines = File . ReadAllLines ( _logFile ) . Length ;
99+ Assert . True ( beforeLines > 0 , "Precondition: file should contain lines" ) ;
100+
101+ // Act: write one more entry -> triggers truncation branch
86102 Logger . Info ( "trigger truncate" ) ;
87103
88- // Assert file shrinks roughly in half
89- var newSize = new FileInfo ( _logFile ) . Length ;
90- Assert . True ( newSize < 1_000_000 ) ;
91- Assert . Contains ( "trigger truncate" , File . ReadAllText ( _logFile ) ) ;
104+ // Assert: line count should be roughly half + the appended line
105+ var afterLines = File . ReadAllLines ( _logFile ) ;
106+ Assert . True ( afterLines . Length < beforeLines , "Log file should have been truncated" ) ;
107+ Assert . InRange ( afterLines . Length , beforeLines / 2 , beforeLines / 2 + 100 ) ;
108+
109+ // Earliest lines should be gone; appended line should be present
110+ Assert . DoesNotContain ( afterLines , l => l . Contains ( "LINE 000000" ) ) ;
111+ Assert . Contains ( afterLines , l => l . Contains ( "trigger truncate" ) ) ;
112+
113+ // Reset quiet mode for other tests
114+ Logger . QuietMode = false ;
92115 }
116+
93117 }
94118}
0 commit comments