From 2698e1e29ce11ec12e4092aa67c80032fb7923df Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Sat, 8 Feb 2025 12:20:53 +0100 Subject: [PATCH] Removed the RunProcessTask task from the library target. --- .../Internal/Tasks/RunProcessTask.swift | 75 ------------------- .../Internal/Tasks/RunProcessTaskTests.swift | 68 ----------------- 2 files changed, 143 deletions(-) delete mode 100644 Library/Sources/Internal/Tasks/RunProcessTask.swift delete mode 100644 Test/Sources/Cases/Internal/Tasks/RunProcessTaskTests.swift diff --git a/Library/Sources/Internal/Tasks/RunProcessTask.swift b/Library/Sources/Internal/Tasks/RunProcessTask.swift deleted file mode 100644 index ea267b4..0000000 --- a/Library/Sources/Internal/Tasks/RunProcessTask.swift +++ /dev/null @@ -1,75 +0,0 @@ -import Foundation - -struct RunProcessTask { - - // MARK: Type aliases - - typealias Output = String - - // MARK: Properties - - private var process: Processable - - // MARK: Initialisers - - init(process: Processable) { - self.process = process - } - - // MARK: Functions - - @discardableResult - mutating func callAsFunction( - path: String, arguments: [String] = [] - ) async throws (RunProcessError) -> Output { - process.executableURL = URL(at: path) - process.arguments = arguments - - let pipeError = Pipe() - let pipeOutput = Pipe() - - process.standardError = pipeError - process.standardOutput = pipeOutput - - async let streamOutput = pipeOutput.availableData.append() - async let streamError = pipeError.availableData.append() - - do { - try process.run() - - let dataOutput = await streamOutput - let dataError = await streamError - - guard dataError.isEmpty else { - guard let errorOutput = String(data: dataError, encoding: .utf8) else { - throw RunProcessError.unexpected - } - - throw RunProcessError.output(errorOutput) - } - - guard let output = String(data: dataOutput, encoding: .utf8) else { - throw RunProcessError.unexpected - } - - return await withCheckedContinuation { continuation in - process.terminationHandler = { _ in - continuation.resume(returning: output) - } - } - } catch let error as RunProcessError { - throw error - } catch { - throw RunProcessError.captured(error.localizedDescription) - } - } - -} - -// MARK: - Errors - -public enum RunProcessError: Error, Equatable { - case captured(_ output: String) - case output(_ output: String) - case unexpected -} diff --git a/Test/Sources/Cases/Internal/Tasks/RunProcessTaskTests.swift b/Test/Sources/Cases/Internal/Tasks/RunProcessTaskTests.swift deleted file mode 100644 index f493e1f..0000000 --- a/Test/Sources/Cases/Internal/Tasks/RunProcessTaskTests.swift +++ /dev/null @@ -1,68 +0,0 @@ -import Foundation -import Testing - -@testable import ColibriLibrary - -struct RunProcessTaskTests { - - // MARK: Properties - - private var process: Process - - // MARK: Initialisers - - init() { - self.process = Process() - } - - // MARK: Functions tests - - @Test(arguments: [Argument.empty, Argument.listAllInFolder]) - func run(with arguments: [String]) async throws { - // GIVEN - var task = RunProcessTask(process: process) - - // WHEN - let output = try await task(path: .ls, arguments: arguments) - - // THEN - #expect(output.isEmpty == false) - } - - @Test(arguments: zip([Argument.help, Argument.listAllInPWD], Throw.outputs)) - func runThrows(with arguments: [String], throws error: RunProcessError) async throws { - // GIVEN - var task = RunProcessTask(process: process) - - // WHEN - // THEN - await #expect(throws: error) { - try await task(path: .ls, arguments: arguments) - } - } - -} - -// MARK: - String+Constants - -private extension String { - static let ls = "/bin/ls" -} - -// MARK: - Parameters - -private extension RunProcessTaskTests { - enum Argument { - static let empty: [String] = [] - static let help: [String] = ["--help"] - static let listAllInFolder: [String] = ["-la", "."] - static let listAllInPWD: [String] = ["-la", "~"] - } - - enum Throw { - static let outputs: [RunProcessError] = [ - .output("ls: unrecognized option `--help\'\nusage: ls [-@ABCFGHILOPRSTUWXabcdefghiklmnopqrstuvwxy1%,] [--color=when] [-D format] [file ...]\n"), - .output("ls: ~: No such file or directory\n") - ] - } -}