Add "parameters" function for turning a sequence into valid parameters for a shell command, properly quoted.

This commit is contained in:
Kare Morstol
2014-10-23 01:41:53 +02:00
parent 991da5fd39
commit 6d588bfe29
2 changed files with 20 additions and 0 deletions
+4
View File
@@ -86,3 +86,7 @@ public func $ (shellcommand: String) -> String {
return output.fileHandleForReading.read().trim()
}
/** Turn a sequence into valid parameters for a shell command, properly quoted */
public func parameters <S : SequenceType>(sequence: S) -> String {
return sequence |> map {"\"\(toString($0))\""} |> join(" ")
}
+16
View File
@@ -32,4 +32,20 @@ class Command_Tests: XCTestCase {
let result = stream("line 1\nline 2\nline 3") |> SwiftShell.run("grep " + $("echo 2"))
XCTAssertEqual( result.read(), "line 2\n")
}
func testParametersFromSequenceOfStrings () {
XCTAssertEqual( parameters(["one", "two", "three"]), "\"one\" \"two\" \"three\"" )
}
func testParametersFromSequenceOfStreams () {
var (writable, readable) = streams()
let result = SequenceOf([stream("one"), stream("two"), stream("three")].generate()) |> parameters
XCTAssertEqual( result, "\"one\" \"two\" \"three\"" )
}
func testParametersFromSequenceOfNumbers () {
XCTAssertEqual( parameters([1, 2, 3]), "\"1\" \"2\" \"3\"" )
}
}