Skip to content

Commit ece709f

Browse files
committed
std: more seek tests
1 parent 320ccbe commit ece709f

File tree

1 file changed

+71
-1
lines changed

1 file changed

+71
-1
lines changed

src/libstd/rt/io/file.rs

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use prelude::*;
1212
use super::support::PathLike;
1313
use super::{Reader, Writer, Seek};
14-
use super::{SeekSet, SeekStyle};
14+
use super::{SeekSet, SeekCur, SeekEnd, SeekStyle};
1515
use rt::rtio::{RtioFileStream, IoFactory, IoFactoryObject};
1616
use rt::io::{io_error, read_error, EndOfFile};
1717
use rt::local::Local;
@@ -314,3 +314,73 @@ fn file_test_io_seeking_impl() {
314314
fn file_test_io_seek_and_tell_smoke_test() {
315315
file_test_io_seeking_impl();
316316
}
317+
318+
fn file_test_io_seek_and_write_impl() {
319+
use io;
320+
do run_in_newsched_task {
321+
use str;
322+
let initial_msg = "food-is-yummy";
323+
let overwrite_msg = "-the-bar!!";
324+
let final_msg = "foo-the-bar!!";
325+
let seek_idx = 3;
326+
let mut read_mem = [0, .. 13];
327+
let filename = &Path("./rt_io_file_test_seek_and_write.txt");
328+
{
329+
let mut rw_stream = FileStream::open(filename, Create, ReadWrite).unwrap();
330+
rw_stream.write(initial_msg.as_bytes());
331+
rw_stream.seek(seek_idx as i64, SeekSet);
332+
rw_stream.write(overwrite_msg.as_bytes());
333+
}
334+
{
335+
let mut read_stream = FileStream::open(filename, Open, Read).unwrap();
336+
read_stream.read(read_mem);
337+
}
338+
FileStream::unlink(filename);
339+
let read_str = str::from_bytes(read_mem);
340+
io::println(fmt!("read_str: '%?' final_msg: '%?'", read_str, final_msg));
341+
assert!(read_str == final_msg.to_owned());
342+
}
343+
}
344+
#[test]
345+
fn file_test_io_seek_and_write() {
346+
file_test_io_seek_and_write_impl();
347+
}
348+
349+
fn file_test_io_seek_shakedown_impl() {
350+
do run_in_newsched_task {
351+
use str; // 01234567890123
352+
let initial_msg = "qwer-asdf-zxcv";
353+
let chunk_one = "qwer";
354+
let chunk_two = "asdf";
355+
let chunk_three = "zxcv";
356+
let mut read_mem = [0, .. 4];
357+
let filename = &Path("./rt_io_file_test_seek_shakedown.txt");
358+
{
359+
let mut rw_stream = FileStream::open(filename, Create, ReadWrite).unwrap();
360+
rw_stream.write(initial_msg.as_bytes());
361+
}
362+
{
363+
let mut read_stream = FileStream::open(filename, Open, Read).unwrap();
364+
365+
read_stream.seek(-4, SeekEnd);
366+
read_stream.read(read_mem);
367+
let read_str = str::from_bytes(read_mem);
368+
assert!(read_str == chunk_three.to_owned());
369+
370+
read_stream.seek(-9, SeekCur);
371+
read_stream.read(read_mem);
372+
let read_str = str::from_bytes(read_mem);
373+
assert!(read_str == chunk_two.to_owned());
374+
375+
read_stream.seek(0, SeekSet);
376+
read_stream.read(read_mem);
377+
let read_str = str::from_bytes(read_mem);
378+
assert!(read_str == chunk_one.to_owned());
379+
}
380+
FileStream::unlink(filename);
381+
}
382+
}
383+
#[test]
384+
fn file_test_io_seek_shakedown() {
385+
file_test_io_seek_shakedown_impl();
386+
}

0 commit comments

Comments
 (0)