diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-01-17 19:05:07 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-01-17 19:48:58 -0800 |
| commit | 6e27b27cf8a9ece270f2556c3362524854d06de4 (patch) | |
| tree | e310348b211f329737cec9a1a30fbf641492ad46 /src/libstd/run_program.rs | |
| parent | 17bf4b0e1be01bc7a54c389deb5896949736d7f2 (diff) | |
| download | rust-6e27b27cf8a9ece270f2556c3362524854d06de4.tar.gz rust-6e27b27cf8a9ece270f2556c3362524854d06de4.zip | |
libstd: Move std tests into libstd
Diffstat (limited to 'src/libstd/run_program.rs')
| -rw-r--r-- | src/libstd/run_program.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/libstd/run_program.rs b/src/libstd/run_program.rs index cc1e7c96046..e40526b5884 100644 --- a/src/libstd/run_program.rs +++ b/src/libstd/run_program.rs @@ -294,6 +294,75 @@ fn waitpid(pid: pid_t) -> int { } } +#[cfg(test)] +mod tests { + + import io::writer_util; + import ctypes::fd_t; + + // Regression test for memory leaks + #[ignore(cfg(target_os = "win32"))] // FIXME + fn test_leaks() { + run::run_program("echo", []); + run::start_program("echo", []); + run::program_output("echo", []); + } + + #[test] + fn test_pipes() { + let pipe_in = os::pipe(); + let pipe_out = os::pipe(); + let pipe_err = os::pipe(); + + let pid = + run::spawn_process( + "cat", [], pipe_in.in, pipe_out.out, pipe_err.out); + os::close(pipe_in.in); + os::close(pipe_out.out); + os::close(pipe_err.out); + + if pid == -1i32 { fail; } + let expected = "test"; + writeclose(pipe_in.out, expected); + let actual = readclose(pipe_out.in); + readclose(pipe_err.in); + os::waitpid(pid); + + log(debug, expected); + log(debug, actual); + assert (expected == actual); + + fn writeclose(fd: fd_t, s: str) { + #error("writeclose %d, %s", fd as int, s); + let writer = io::fd_writer(fd, false); + writer.write_str(s); + + os::close(fd); + } + + fn readclose(fd: fd_t) -> str { + // Copied from run::program_output + let file = os::fd_FILE(fd); + let reader = io::FILE_reader(file, false); + let buf = ""; + while !reader.eof() { + let bytes = reader.read_bytes(4096u); + buf += str::unsafe_from_bytes(bytes); + } + os::fclose(file); + ret buf; + } + } + + #[test] + fn waitpid() { + let pid = run::spawn_process("false", [], 0i32, 0i32, 0i32); + let status = run::waitpid(pid); + assert status == 1; + } + +} + // Local Variables: // mode: rust // fill-column: 78; |
