@@ -1917,6 +1917,53 @@ mod tests {
1917
1917
check ! ( fs:: remove_file( filename) ) ;
1918
1918
}
1919
1919
1920
+ #[ test]
1921
+ fn file_test_io_read_write_offset ( ) {
1922
+ let tmpdir = tmpdir ( ) ;
1923
+ let filename = tmpdir. join ( "file_rt_io_file_test_read_write_offset.txt" ) ;
1924
+ let mut buf = [ 0 ; 256 ] ;
1925
+ let write1 = "asdf" ;
1926
+ let write2 = "qwer-" ;
1927
+ let write3 = "-zxcv" ;
1928
+ let content = "qwer-asdf-zxcv" ;
1929
+ {
1930
+ let oo = OpenOptions :: new ( ) . create_new ( true ) . write ( true ) . read ( true ) . clone ( ) ;
1931
+ let mut rw = check ! ( oo. open( & filename) ) ;
1932
+ assert_eq ! ( check!( rw. write_offset( write1. as_bytes( ) , 5 ) ) , write1. len( ) ) ;
1933
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 0 ) ;
1934
+ assert_eq ! ( check!( rw. read_offset( & mut buf, 5 ) ) , write1. len( ) ) ;
1935
+ assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) , Ok ( write1) ) ;
1936
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 0 ) ;
1937
+ assert_eq ! ( check!( rw. write( write2. as_bytes( ) ) ) , write2. len( ) ) ;
1938
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 5 ) ;
1939
+ assert_eq ! ( check!( rw. read( & mut buf) ) , write1. len( ) ) ;
1940
+ assert_eq ! ( str :: from_utf8( & buf[ ..write1. len( ) ] ) , Ok ( write1) ) ;
1941
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 9 ) ;
1942
+ assert_eq ! ( check!( rw. read_offset( & mut buf[ ..write2. len( ) ] , 0 ) ) , write2. len( ) ) ;
1943
+ assert_eq ! ( str :: from_utf8( & buf[ ..write2. len( ) ] ) , Ok ( write2) ) ;
1944
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 9 ) ;
1945
+ assert_eq ! ( check!( rw. write_offset( write3. as_bytes( ) , 9 ) ) , write3. len( ) ) ;
1946
+ assert_eq ! ( check!( rw. seek( SeekFrom :: Current ( 0 ) ) ) , 9 ) ;
1947
+ }
1948
+ {
1949
+ let mut read = check ! ( File :: open( & filename) ) ;
1950
+ assert_eq ! ( check!( read. read_offset( & mut buf, 0 ) ) , content. len( ) ) ;
1951
+ assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) , Ok ( content) ) ;
1952
+ assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) , 0 ) ;
1953
+ assert_eq ! ( check!( read. seek( SeekFrom :: End ( -5 ) ) ) , 9 ) ;
1954
+ assert_eq ! ( check!( read. read_offset( & mut buf, 0 ) ) , content. len( ) ) ;
1955
+ assert_eq ! ( str :: from_utf8( & buf[ ..content. len( ) ] ) , Ok ( content) ) ;
1956
+ assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) , 9 ) ;
1957
+ assert_eq ! ( check!( read. read( & mut buf) ) , write3. len( ) ) ;
1958
+ assert_eq ! ( str :: from_utf8( & buf[ ..write3. len( ) ] ) , Ok ( write3) ) ;
1959
+ assert_eq ! ( check!( read. seek( SeekFrom :: Current ( 0 ) ) ) , 14 ) ;
1960
+ assert_eq ! ( check!( read. read_offset( & 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 ) ) ) , 14 ) ;
1963
+ }
1964
+ check ! ( fs:: remove_file( & filename) ) ;
1965
+ }
1966
+
1920
1967
#[ test]
1921
1968
fn file_test_stat_is_correct_on_is_file ( ) {
1922
1969
let tmpdir = tmpdir ( ) ;
0 commit comments