Skip to content

Commit

Permalink
Merge pull request #1 from leavez/bugfix
Browse files Browse the repository at this point in the history
Bugfix
  • Loading branch information
leavez authored Mar 15, 2021
2 parents 7c15c15 + 05eba4c commit 778f3cd
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 3 deletions.
7 changes: 7 additions & 0 deletions Sources/Shell/Output.swift
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ public final class RunOutput {
stderror.trimmingCharacters(in: .whitespacesAndNewlines)
}

public func throwIfError() throws -> Self {
if let err = error() {
throw err
}
return self
}

// MAKR: -

enum Result {
Expand Down
2 changes: 1 addition & 1 deletion Sources/Shell/Shell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ public func run(_ executable: String, args: [String], otherParams: RunParams? =
}
let (process, group, waitFunc) = run

let stdoutData = outPipe.fileHandleForReading.readDataToEndOfFile()
var stderrData: Data!
DispatchQueue.global().async(group: group) {
stderrData = errPipe.fileHandleForReading.readDataToEndOfFile()
}
let stdoutData = outPipe.fileHandleForReading.readDataToEndOfFile()

waitFunc()

Expand Down
7 changes: 5 additions & 2 deletions Tests/ShellTests/OutputTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ extension String: LocalizedError {

final class OutputTests: XCTestCase {

func test_RunOutput_errored() {
func test_RunOutput_errored() throws {
let r = RunOutput(raw: .throwError("dd"))
if let err = r.error(), case let .launchFailed(innerErr) = err {
XCTAssertEqual(innerErr.localizedDescription, "dd")
Expand All @@ -29,9 +29,10 @@ final class OutputTests: XCTestCase {
XCTAssertEqual(r.stderror, "")
XCTAssertEqual(r.stdoutTrimmed, "")
XCTAssertEqual(r.stderrTrimmed, "")
XCTAssertThrowsError(try r.throwIfError())
}

func test_RunOutput_succeeded() {
func test_RunOutput_succeeded() throws {
let r = RunOutput(raw: .finished(code: 0, stdout: "123\n".data(using: .utf8), stderr: "456\n".data(using: .utf8)))
XCTAssertNil(r.error())
XCTAssertEqual(r.exitCode, 0)
Expand All @@ -40,6 +41,8 @@ final class OutputTests: XCTestCase {
XCTAssertEqual(r.stderror, "456\n")
XCTAssertEqual(r.stdoutTrimmed, "123")
XCTAssertEqual(r.stderrTrimmed, "456")
let n = try r.throwIfError()
XCTAssertTrue(n === r)
}

func test_RunOutput_failed() {
Expand Down
12 changes: 12 additions & 0 deletions Tests/ShellTests/ShellTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ final class ShellTests: XCTestCase {
#endif
}

func testShellRun_longOutput() {
// more then the buffer length
let count = 100000
let stdout = Shell.run("bash", "-c", "for i in {1..\(count)}; do >&1 echo 'Welcome'; done")
XCTAssertTrue(stdout.succeeded)
XCTAssertEqual(stdout.stdout, String(repeating: "Welcome\n", count: count))

let stderr = Shell.run("bash", "-c", "for i in {1..\(count)}; do >&2 echo 'Welcome'; done")
XCTAssertTrue(stderr.succeeded)
XCTAssertEqual(stderr.stderror, String(repeating: "Welcome\n", count: count))
}

// --- test run and print ---

func testRunAndPrint_succeed() throws {
Expand Down

0 comments on commit 778f3cd

Please sign in to comment.