From 2cebef095e61608a3d35710cb5fd3d7de18b68ac Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 28 Oct 2011 21:19:59 -0700 Subject: stdlib: Make io failures recoverable by returning a result --- src/test/bench/task-perf-word-count.rs | 3 +- src/test/compile-fail/missingmod.rc | 3 ++ src/test/stdtest/io.rs | 50 ++++++++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/test/compile-fail/missingmod.rc (limited to 'src/test') diff --git a/src/test/bench/task-perf-word-count.rs b/src/test/bench/task-perf-word-count.rs index 321dfb57caa..2c50327454a 100644 --- a/src/test/bench/task-perf-word-count.rs +++ b/src/test/bench/task-perf-word-count.rs @@ -20,6 +20,7 @@ import std::io; import std::time; import std::u64; +import std::result; import std::task; import std::task::joinable_task; @@ -30,7 +31,7 @@ import std::comm::recv; import std::comm::send; fn map(filename: str, emit: map_reduce::putter) { - let f = io::file_reader(filename); + let f = result::get(io::file_reader(filename)); while true { diff --git a/src/test/compile-fail/missingmod.rc b/src/test/compile-fail/missingmod.rc new file mode 100644 index 00000000000..6e13a970509 --- /dev/null +++ b/src/test/compile-fail/missingmod.rc @@ -0,0 +1,3 @@ +// error-pattern:error opening + +mod doesnotexist; \ No newline at end of file diff --git a/src/test/stdtest/io.rs b/src/test/stdtest/io.rs index 08330c619fc..d84b80e2ed3 100644 --- a/src/test/stdtest/io.rs +++ b/src/test/stdtest/io.rs @@ -2,6 +2,7 @@ use std; import std::io; import std::str; +import std::result; #[cfg(target_os = "linux")] #[cfg(target_os = "win32")] @@ -13,10 +14,10 @@ fn test_simple() { log frood; { let out: io::writer = - io::file_writer(tmpfile, [io::create, io::truncate]); + result::get(io::file_writer(tmpfile, [io::create, io::truncate])); out.write_str(frood); } - let inp: io::reader = io::file_reader(tmpfile); + let inp: io::reader = result::get(io::file_reader(tmpfile)); let frood2: str = inp.read_c_str(); log frood2; assert (str::eq(frood, frood2)); @@ -28,3 +29,48 @@ fn test_simple() { #[ignore] fn test_simple() { } +#[test] +fn file_reader_not_exist() { + alt io::file_reader("not a file") { + result::err(e) { + assert e == "error opening not a file"; + } + result::ok(_) { fail; } + } +} + +#[cfg(target_os = "linux")] +#[cfg(target_os = "win32")] +#[test] +fn file_buf_writer_bad_name() { + alt io::file_buf_writer("/?", []) { + result::err(e) { + assert e == "error opening /?"; + } + result::ok(_) { fail; } + } +} + +// FIXME (726) +#[cfg(target_os = "macos")] +#[test] +#[ignore] +fn file_buf_writer_bad_name() { } + +#[cfg(target_os = "linux")] +#[cfg(target_os = "win32")] +#[test] +fn buffered_file_buf_writer_bad_name() { + alt io::buffered_file_buf_writer("/?") { + result::err(e) { + assert e == "error opening /?"; + } + result::ok(_) { fail; } + } +} + +// FIXME (726) +#[cfg(target_os = "macos")] +#[test] +#[ignore] +fn buffered_file_buf_writer_bad_name() { } -- cgit 1.4.1-3-g733a5