diff --git a/SwiftShell/Stream.swift b/SwiftShell/Stream.swift index 7dcadfa..70090e9 100644 --- a/SwiftShell/Stream.swift +++ b/SwiftShell/Stream.swift @@ -91,6 +91,16 @@ public func stream (sequ } } +/** +Returns a writable stream and a readable stream. What you write to the 1st one can be read from the 2nd one. +Make sure to call closeStream() on the writable stream before you call read() on the readable one. +*/ +public func streams () -> (WriteableStreamType, ReadableStreamType) { + let pipe = NSPipe() + return (pipe.fileHandleForWriting, pipe.fileHandleForReading) +} + + /** Splits a stream into parts separated by "delimiter". */ struct StringStreamGenerator : GeneratorType { private let stream: ReadableStreamType diff --git a/SwiftShellTests/Stream_Tests.swift b/SwiftShellTests/Stream_Tests.swift index ed43a4d..4a98fc8 100644 --- a/SwiftShellTests/Stream_Tests.swift +++ b/SwiftShellTests/Stream_Tests.swift @@ -35,17 +35,12 @@ class Stream_Tests: XCTestCase { XCTAssertEqual( stream(["item 1","item 2"]).read(), "item 1item 2") } - func streams () -> (WriteableStreamType, ReadableStreamType) { - let pipe = NSPipe() - return (pipe.fileHandleForWriting, pipe.fileHandleForReading) - } - func testPrintStreamToStream () { var (writable, readable) = streams() stream("this goes in") |> writable - XCTAssertEqual(readable.readSome()!, "this goes in") + XCTAssertEqual( readable.readSome()!, "this goes in") } func testPrintStringToStream () { @@ -53,7 +48,7 @@ class Stream_Tests: XCTestCase { "this goes in" |> writable - XCTAssertEqual(readable.readSome()!, "this goes in") + XCTAssertEqual( readable.readSome()!, "this goes in") } func testCommandChainToStream () { @@ -61,7 +56,7 @@ class Stream_Tests: XCTestCase { SwiftShell.run("echo this is streamed") |> SwiftShell.run("wc -w") |> writable - XCTAssertEqual(readable.readSome()!.trim(), "3") + XCTAssertEqual( readable.readSome()!.trim(), "3") }