@@ -1903,6 +1903,130 @@ mod tests {
19031903        check ! ( fs:: remove_file( filename) ) ; 
19041904    } 
19051905
1906+     #[ test]  
1907+     fn  file_test_io_eof ( )  { 
1908+         let  tmpdir = tmpdir ( ) ; 
1909+         let  filename = tmpdir. join ( "file_rt_io_file_test_eof.txt" ) ; 
1910+         let  mut  buf = [ 0 ;  256 ] ; 
1911+         { 
1912+             let  oo = OpenOptions :: new ( ) . create_new ( true ) . write ( true ) . read ( true ) . clone ( ) ; 
1913+             let  mut  rw = check ! ( oo. open( & filename) ) ; 
1914+             assert_eq ! ( check!( rw. read( & mut  buf) ) ,  0 ) ; 
1915+             assert_eq ! ( check!( rw. read( & mut  buf) ) ,  0 ) ; 
1916+         } 
1917+         check ! ( fs:: remove_file( & filename) ) ; 
1918+     } 
1919+ 
1920+     #[ test]  
1921+     #[ cfg( unix) ]  
1922+     fn  file_test_io_read_write_at ( )  { 
1923+         use  os:: unix:: fs:: FileExt ; 
1924+ 
1925+         let  tmpdir = tmpdir ( ) ; 
1926+         let  filename = tmpdir. join ( "file_rt_io_file_test_read_write_at.txt" ) ; 
1927+         let  mut  buf = [ 0 ;  256 ] ; 
1928+         let  write1 = "asdf" ; 
1929+         let  write2 = "qwer-" ; 
1930+         let  write3 = "-zxcv" ; 
1931+         let  content = "qwer-asdf-zxcv" ; 
1932+         { 
1933+             let  oo = OpenOptions :: new ( ) . create_new ( true ) . write ( true ) . read ( true ) . clone ( ) ; 
1934+             let  mut  rw = check ! ( oo. open( & filename) ) ; 
1935+             assert_eq ! ( check!( rw. write_at( write1. as_bytes( ) ,  5 ) ) ,  write1. len( ) ) ; 
1936+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  0 ) ; 
1937+             assert_eq ! ( check!( rw. read_at( & mut  buf,  5 ) ) ,  write1. len( ) ) ; 
1938+             assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) ,  Ok ( write1) ) ; 
1939+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  0 ) ; 
1940+             assert_eq ! ( check!( rw. read_at( & mut  buf[ ..write2. len( ) ] ,  0 ) ) ,  write2. len( ) ) ; 
1941+             assert_eq ! ( str :: from_utf8( & buf[ ..write2. len( ) ] ) ,  Ok ( "\0 \0 \0 \0 \0 " ) ) ; 
1942+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  0 ) ; 
1943+             assert_eq ! ( check!( rw. write( write2. as_bytes( ) ) ) ,  write2. len( ) ) ; 
1944+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  5 ) ; 
1945+             assert_eq ! ( check!( rw. read( & mut  buf) ) ,  write1. len( ) ) ; 
1946+             assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) ,  Ok ( write1) ) ; 
1947+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1948+             assert_eq ! ( check!( rw. read_at( & mut  buf[ ..write2. len( ) ] ,  0 ) ) ,  write2. len( ) ) ; 
1949+             assert_eq ! ( str :: from_utf8( & buf[ ..write2. len( ) ] ) ,  Ok ( write2) ) ; 
1950+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1951+             assert_eq ! ( check!( rw. write_at( write3. as_bytes( ) ,  9 ) ) ,  write3. len( ) ) ; 
1952+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1953+         } 
1954+         { 
1955+             let  mut  read = check ! ( File :: open( & filename) ) ; 
1956+             assert_eq ! ( check!( read. read_at( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
1957+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
1958+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  0 ) ; 
1959+             assert_eq ! ( check!( read. seek( SeekFrom :: End ( -5 ) ) ) ,  9 ) ; 
1960+             assert_eq ! ( check!( read. read_at( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
1961+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
1962+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1963+             assert_eq ! ( check!( read. read( & mut  buf) ) ,  write3. len( ) ) ; 
1964+             assert_eq ! ( str :: from_utf8( & buf[ ..write3. len( ) ] ) ,  Ok ( write3) ) ; 
1965+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
1966+             assert_eq ! ( check!( read. read_at( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
1967+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
1968+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
1969+             assert_eq ! ( check!( read. read_at( & mut  buf,  14 ) ) ,  0 ) ; 
1970+             assert_eq ! ( check!( read. read_at( & mut  buf,  15 ) ) ,  0 ) ; 
1971+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
1972+         } 
1973+         check ! ( fs:: remove_file( & filename) ) ; 
1974+     } 
1975+ 
1976+     #[ test]  
1977+     #[ cfg( windows) ]  
1978+     fn  file_test_io_seek_read_write ( )  { 
1979+         use  os:: windows:: fs:: FileExt ; 
1980+ 
1981+         let  tmpdir = tmpdir ( ) ; 
1982+         let  filename = tmpdir. join ( "file_rt_io_file_test_seek_read_write.txt" ) ; 
1983+         let  mut  buf = [ 0 ;  256 ] ; 
1984+         let  write1 = "asdf" ; 
1985+         let  write2 = "qwer-" ; 
1986+         let  write3 = "-zxcv" ; 
1987+         let  content = "qwer-asdf-zxcv" ; 
1988+         { 
1989+             let  oo = OpenOptions :: new ( ) . create_new ( true ) . write ( true ) . read ( true ) . clone ( ) ; 
1990+             let  mut  rw = check ! ( oo. open( & filename) ) ; 
1991+             assert_eq ! ( check!( rw. seek_write( write1. as_bytes( ) ,  5 ) ) ,  write1. len( ) ) ; 
1992+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1993+             assert_eq ! ( check!( rw. seek_read( & mut  buf,  5 ) ) ,  write1. len( ) ) ; 
1994+             assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) ,  Ok ( write1) ) ; 
1995+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
1996+             assert_eq ! ( check!( rw. seek( SeekFrom :: Start ( 0 ) ) ) ,  0 ) ; 
1997+             assert_eq ! ( check!( rw. write( write2. as_bytes( ) ) ) ,  write2. len( ) ) ; 
1998+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  5 ) ; 
1999+             assert_eq ! ( check!( rw. read( & mut  buf) ) ,  write1. len( ) ) ; 
2000+             assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) ,  Ok ( write1) ) ; 
2001+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  9 ) ; 
2002+             assert_eq ! ( check!( rw. seek_read( & mut  buf[ ..write2. len( ) ] ,  0 ) ) ,  write2. len( ) ) ; 
2003+             assert_eq ! ( str :: from_utf8( & buf[ ..write2. len( ) ] ) ,  Ok ( write2) ) ; 
2004+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  5 ) ; 
2005+             assert_eq ! ( check!( rw. seek_write( write3. as_bytes( ) ,  9 ) ) ,  write3. len( ) ) ; 
2006+             assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
2007+         } 
2008+         { 
2009+             let  mut  read = check ! ( File :: open( & filename) ) ; 
2010+             assert_eq ! ( check!( read. seek_read( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
2011+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
2012+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
2013+             assert_eq ! ( check!( read. seek( SeekFrom :: End ( -5 ) ) ) ,  9 ) ; 
2014+             assert_eq ! ( check!( read. seek_read( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
2015+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
2016+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
2017+             assert_eq ! ( check!( read. seek( SeekFrom :: End ( -5 ) ) ) ,  9 ) ; 
2018+             assert_eq ! ( check!( read. read( & mut  buf) ) ,  write3. len( ) ) ; 
2019+             assert_eq ! ( str :: from_utf8( & buf[ ..write3. len( ) ] ) ,  Ok ( write3) ) ; 
2020+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
2021+             assert_eq ! ( check!( read. seek_read( & mut  buf,  0 ) ) ,  content. len( ) ) ; 
2022+             assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) ,  Ok ( content) ) ; 
2023+             assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) ,  14 ) ; 
2024+             assert_eq ! ( check!( read. seek_read( & mut  buf,  14 ) ) ,  0 ) ; 
2025+             assert_eq ! ( check!( read. seek_read( & mut  buf,  15 ) ) ,  0 ) ; 
2026+         } 
2027+         check ! ( fs:: remove_file( & filename) ) ; 
2028+     } 
2029+ 
19062030    #[ test]  
19072031    fn  file_test_stat_is_correct_on_is_file ( )  { 
19082032        let  tmpdir = tmpdir ( ) ; 
@@ -2221,8 +2345,8 @@ mod tests {
22212345        check ! ( fs:: set_permissions( & out,  attr. permissions( ) ) ) ; 
22222346    } 
22232347
2224-     #[ cfg( windows) ]  
22252348    #[ test]  
2349+     #[ cfg( windows) ]  
22262350    fn  copy_file_preserves_streams ( )  { 
22272351        let  tmp = tmpdir ( ) ; 
22282352        check ! ( check!( File :: create( tmp. join( "in.txt:bunny" ) ) ) . write( "carrot" . as_bytes( ) ) ) ; 
0 commit comments