@@ -880,7 +880,7 @@ final class ProgressBarTests: XCTestCase {
880880 try pipe. fileHandleForWriting. close ( )
881881
882882 let data = pipe. fileHandleForReading. readDataToEndOfFile ( )
883- let output = String ( data : data, encoding : . utf8 ) ?? " "
883+ let output = String ( decoding : data, as : UTF8 . self )
884884 let lines = output. components ( separatedBy: " \n " ) . filter { !$0. isEmpty }
885885 // Expect exactly 2 lines: one from render, one from finish
886886 XCTAssertEqual ( lines. count, 2 )
@@ -903,7 +903,7 @@ final class ProgressBarTests: XCTestCase {
903903 try pipe. fileHandleForWriting. close ( )
904904
905905 let data = pipe. fileHandleForReading. readDataToEndOfFile ( )
906- let output = String ( data : data, encoding : . utf8 ) ?? " "
906+ let output = String ( decoding : data, as : UTF8 . self )
907907 XCTAssertFalse ( output. contains ( " \u{001B} " ) )
908908 }
909909
@@ -922,12 +922,32 @@ final class ProgressBarTests: XCTestCase {
922922 try pipe. fileHandleForWriting. close ( )
923923
924924 let data = pipe. fileHandleForReading. readDataToEndOfFile ( )
925- let output = String ( data : data, encoding : . utf8 ) ?? " "
925+ let output = String ( decoding : data, as : UTF8 . self )
926926 // Plain mode should use newlines, not carriage returns
927927 XCTAssertFalse ( output. contains ( " \r " ) )
928928 XCTAssertTrue ( output. contains ( " \n " ) )
929929 }
930930
931+ func testPlainModeDefaultClearOnFinishOmitsFinalLine( ) async throws {
932+ let pipe = Pipe ( )
933+ let config = try ProgressConfig (
934+ terminal: pipe. fileHandleForWriting,
935+ description: " Task " ,
936+ showSpinner: false ,
937+ outputMode: . plain
938+ )
939+ let progress = ProgressBar ( config: config)
940+ progress. render ( force: true )
941+ progress. finish ( )
942+ try pipe. fileHandleForWriting. close ( )
943+
944+ let data = pipe. fileHandleForReading. readDataToEndOfFile ( )
945+ let output = String ( decoding: data, as: UTF8 . self)
946+ let lines = output. components ( separatedBy: " \n " ) . filter { !$0. isEmpty }
947+ XCTAssertEqual ( lines. count, 1 )
948+ XCTAssertEqual ( lines. first, " Task [0s] " )
949+ }
950+
931951 func testOutputModeDefaultIsAnsi( ) async throws {
932952 let config = try ProgressConfig ( description: " Task " )
933953 XCTAssertEqual ( config. outputMode, . ansi)
0 commit comments