1
1
use rand:: RngCore ;
2
2
3
+ use super :: Dir ;
3
4
#[ cfg( any(
4
5
windows,
5
6
target_os = "freebsd" ,
@@ -17,7 +18,7 @@ use crate::char::MAX_LEN_UTF8;
17
18
target_vendor = "apple" ,
18
19
) ) ]
19
20
use crate :: fs:: TryLockError ;
20
- use crate :: fs:: { self , File , FileTimes , OpenOptions } ;
21
+ use crate :: fs:: { self , File , FileTimes , OpenOptions , create_dir } ;
21
22
use crate :: io:: prelude:: * ;
22
23
use crate :: io:: { BorrowedBuf , ErrorKind , SeekFrom } ;
23
24
use crate :: mem:: MaybeUninit ;
@@ -2024,3 +2025,85 @@ fn test_rename_junction() {
2024
2025
// Junction links are always absolute so we just check the file name is correct.
2025
2026
assert_eq ! ( fs:: read_link( & dest) . unwrap( ) . file_name( ) , Some ( not_exist. as_os_str( ) ) ) ;
2026
2027
}
2028
+
2029
+ #[ test]
2030
+ fn test_dir_smoke_test ( ) {
2031
+ let tmpdir = tmpdir ( ) ;
2032
+ check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2033
+ }
2034
+
2035
+ #[ test]
2036
+ fn test_dir_read_file ( ) {
2037
+ let tmpdir = tmpdir ( ) ;
2038
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2039
+ check ! ( f. write( b"bar" ) ) ;
2040
+ check ! ( f. flush( ) ) ;
2041
+ drop ( f) ;
2042
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2043
+ let mut f = check ! ( dir. open( "foo.txt" ) ) ;
2044
+ let mut buf = [ 0u8 ; 3 ] ;
2045
+ check ! ( f. read_exact( & mut buf) ) ;
2046
+ assert_eq ! ( b"bar" , & buf) ;
2047
+ }
2048
+
2049
+ #[ test]
2050
+ fn test_dir_write_file ( ) {
2051
+ let tmpdir = tmpdir ( ) ;
2052
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2053
+ let mut f = check ! ( dir. open_with( "foo.txt" , & OpenOptions :: new( ) . write( true ) . create( true ) ) ) ;
2054
+ check ! ( f. write( b"bar" ) ) ;
2055
+ check ! ( f. flush( ) ) ;
2056
+ drop ( f) ;
2057
+ let mut f = check ! ( File :: open( tmpdir. join( "foo.txt" ) ) ) ;
2058
+ let mut buf = [ 0u8 ; 3 ] ;
2059
+ check ! ( f. read_exact( & mut buf) ) ;
2060
+ assert_eq ! ( b"bar" , & buf) ;
2061
+ }
2062
+
2063
+ #[ test]
2064
+ fn test_dir_remove_file ( ) {
2065
+ let tmpdir = tmpdir ( ) ;
2066
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2067
+ check ! ( f. write( b"bar" ) ) ;
2068
+ check ! ( f. flush( ) ) ;
2069
+ drop ( f) ;
2070
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2071
+ check ! ( dir. remove_file( "foo.txt" ) ) ;
2072
+ let result = File :: open ( tmpdir. join ( "foo.txt" ) ) ;
2073
+ #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2074
+ error ! ( result, "No such file or directory" ) ;
2075
+ #[ cfg( target_os = "vxworks" ) ]
2076
+ error ! ( result, "no such file or directory" ) ;
2077
+ #[ cfg( windows) ]
2078
+ error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2079
+ }
2080
+
2081
+ #[ test]
2082
+ fn test_dir_remove_dir ( ) {
2083
+ let tmpdir = tmpdir ( ) ;
2084
+ check ! ( create_dir( tmpdir. join( "foo" ) ) ) ;
2085
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2086
+ check ! ( dir. remove_dir( "foo" ) ) ;
2087
+ let result = Dir :: new ( tmpdir. join ( "foo" ) ) ;
2088
+ #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2089
+ error ! ( result, "No such file or directory" ) ;
2090
+ #[ cfg( target_os = "vxworks" ) ]
2091
+ error ! ( result, "no such file or directory" ) ;
2092
+ #[ cfg( windows) ]
2093
+ error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2094
+ }
2095
+
2096
+ #[ test]
2097
+ fn test_dir_rename_file ( ) {
2098
+ let tmpdir = tmpdir ( ) ;
2099
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2100
+ check ! ( f. write( b"bar" ) ) ;
2101
+ check ! ( f. flush( ) ) ;
2102
+ drop ( f) ;
2103
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2104
+ check ! ( dir. rename( "foo.txt" , & dir, "baz.txt" ) ) ;
2105
+ let mut f = check ! ( File :: open( tmpdir. join( "baz.txt" ) ) ) ;
2106
+ let mut buf = [ 0u8 ; 3 ] ;
2107
+ check ! ( f. read_exact( & mut buf) ) ;
2108
+ assert_eq ! ( b"bar" , & buf) ;
2109
+ }
0 commit comments