Skip to content

Commit da757f7

Browse files
committed
[Basic] Use OutputByteStream for SimpleProgressBar
1 parent 5fa2c28 commit da757f7

File tree

2 files changed

+16
-18
lines changed

2 files changed

+16
-18
lines changed

Sources/Basic/TerminalController.swift

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,30 +132,28 @@ public protocol ProgressBarProtocol {
132132
}
133133

134134
// Simple ProgressBar which shows the update text in new lines.
135-
public final class SimpleProgressBar<Target: OutputStream>: ProgressBarProtocol {
135+
public final class SimpleProgressBar: ProgressBarProtocol {
136136
private let header: String
137137
private var isClear: Bool
138-
private var stream: UnsafeMutablePointer<Target>
138+
private var stream: OutputByteStream
139139

140-
init(stream: UnsafeMutablePointer<Target>, header: String) {
140+
init(stream: OutputByteStream, header: String) {
141141
self.stream = stream
142142
self.header = header
143143
self.isClear = true
144144
}
145145

146-
private func write(_ string: String) {
147-
stream.pointee.write(string)
148-
}
149-
150146
public func update(percent: Int, text: String) {
151147
if isClear {
152-
write(header)
153-
write("\n")
148+
stream <<< header
149+
stream <<< "\n"
150+
try? stream.flush()
154151
isClear = false
155152
}
156153

157-
write("\(percent)%: " + text)
158-
write("\n")
154+
stream <<< "\(percent)%: " + text
155+
stream <<< "\n"
156+
try? stream.flush()
159157
}
160158

161159
public func complete() {
@@ -207,8 +205,8 @@ public final class ProgressBar: ProgressBarProtocol {
207205
}
208206

209207
/// Creates colored or simple progress bar based on output stream provided stream.
210-
public func createProgressBar<Target: OutputStream>(forStream stream: UnsafeMutablePointer<Target>, header: String) -> ProgressBarProtocol {
211-
if let stdStream = stream.pointee as? LocalFileOutputByteStream, let term = TerminalController(stream: stdStream) {
208+
public func createProgressBar(forStream stream: OutputByteStream, header: String) -> ProgressBarProtocol {
209+
if let stdStream = stream as? LocalFileOutputByteStream, let term = TerminalController(stream: stdStream) {
212210
return ProgressBar(term: term, header: header)
213211
}
214212
return SimpleProgressBar(stream: stream, header: header)

Tests/Basic/TerminalControllerTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ final class TerminalControllerTests: XCTestCase {
8484
}
8585

8686
// Test progress bar when writing to a non tty stream.
87-
var outStream = ""
88-
var bar = createProgressBar(forStream: &outStream, header: "test")
89-
XCTAssertTrue(bar is SimpleProgressBar<String>)
87+
let outStream = OutputByteStream()
88+
var bar = createProgressBar(forStream: outStream, header: "test")
89+
XCTAssertTrue(bar is SimpleProgressBar)
9090

9191
runProgressBar(bar)
92-
XCTAssertEqual(outStream, "test\n0%: 0\n1%: 1\n2%: 2\n3%: 3\n4%: 4\n5%: 5\n")
92+
XCTAssertEqual(outStream.bytes.asString, "test\n0%: 0\n1%: 1\n2%: 2\n3%: 3\n4%: 4\n5%: 5\n")
9393

9494
// Test progress bar when writing a tty stream.
95-
bar = createProgressBar(forStream: &pty.outStream, header: "TestHeader")
95+
bar = createProgressBar(forStream: pty.outStream, header: "TestHeader")
9696
XCTAssertTrue(bar is ProgressBar)
9797

9898
var output = ""

0 commit comments

Comments
 (0)