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 ;
@@ -2084,3 +2085,85 @@ fn test_rename_junction() {
2084
2085
// Junction links are always absolute so we just check the file name is correct.
2085
2086
assert_eq ! ( fs:: read_link( & dest) . unwrap( ) . file_name( ) , Some ( not_exist. as_os_str( ) ) ) ;
2086
2087
}
2088
+
2089
+ #[ test]
2090
+ fn test_dir_smoke_test ( ) {
2091
+ let tmpdir = tmpdir ( ) ;
2092
+ check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2093
+ }
2094
+
2095
+ #[ test]
2096
+ fn test_dir_read_file ( ) {
2097
+ let tmpdir = tmpdir ( ) ;
2098
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2099
+ check ! ( f. write( b"bar" ) ) ;
2100
+ check ! ( f. flush( ) ) ;
2101
+ drop ( f) ;
2102
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2103
+ let mut f = check ! ( dir. open( "foo.txt" ) ) ;
2104
+ let mut buf = [ 0u8 ; 3 ] ;
2105
+ check ! ( f. read_exact( & mut buf) ) ;
2106
+ assert_eq ! ( b"bar" , & buf) ;
2107
+ }
2108
+
2109
+ #[ test]
2110
+ fn test_dir_write_file ( ) {
2111
+ let tmpdir = tmpdir ( ) ;
2112
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2113
+ let mut f = check ! ( dir. open_with( "foo.txt" , & OpenOptions :: new( ) . write( true ) . create( true ) ) ) ;
2114
+ check ! ( f. write( b"bar" ) ) ;
2115
+ check ! ( f. flush( ) ) ;
2116
+ drop ( f) ;
2117
+ let mut f = check ! ( File :: open( tmpdir. join( "foo.txt" ) ) ) ;
2118
+ let mut buf = [ 0u8 ; 3 ] ;
2119
+ check ! ( f. read_exact( & mut buf) ) ;
2120
+ assert_eq ! ( b"bar" , & buf) ;
2121
+ }
2122
+
2123
+ #[ test]
2124
+ fn test_dir_remove_file ( ) {
2125
+ let tmpdir = tmpdir ( ) ;
2126
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2127
+ check ! ( f. write( b"bar" ) ) ;
2128
+ check ! ( f. flush( ) ) ;
2129
+ drop ( f) ;
2130
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2131
+ check ! ( dir. remove_file( "foo.txt" ) ) ;
2132
+ let result = File :: open ( tmpdir. join ( "foo.txt" ) ) ;
2133
+ #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2134
+ error ! ( result, "No such file or directory" ) ;
2135
+ #[ cfg( target_os = "vxworks" ) ]
2136
+ error ! ( result, "no such file or directory" ) ;
2137
+ #[ cfg( windows) ]
2138
+ error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2139
+ }
2140
+
2141
+ #[ test]
2142
+ fn test_dir_remove_dir ( ) {
2143
+ let tmpdir = tmpdir ( ) ;
2144
+ check ! ( create_dir( tmpdir. join( "foo" ) ) ) ;
2145
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2146
+ check ! ( dir. remove_dir( "foo" ) ) ;
2147
+ let result = Dir :: new ( tmpdir. join ( "foo" ) ) ;
2148
+ #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2149
+ error ! ( result, "No such file or directory" ) ;
2150
+ #[ cfg( target_os = "vxworks" ) ]
2151
+ error ! ( result, "no such file or directory" ) ;
2152
+ #[ cfg( windows) ]
2153
+ error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2154
+ }
2155
+
2156
+ #[ test]
2157
+ fn test_dir_rename_file ( ) {
2158
+ let tmpdir = tmpdir ( ) ;
2159
+ let mut f = check ! ( File :: create( tmpdir. join( "foo.txt" ) ) ) ;
2160
+ check ! ( f. write( b"bar" ) ) ;
2161
+ check ! ( f. flush( ) ) ;
2162
+ drop ( f) ;
2163
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2164
+ check ! ( dir. rename( "foo.txt" , & dir, "baz.txt" ) ) ;
2165
+ let mut f = check ! ( File :: open( tmpdir. join( "baz.txt" ) ) ) ;
2166
+ let mut buf = [ 0u8 ; 3 ] ;
2167
+ check ! ( f. read_exact( & mut buf) ) ;
2168
+ assert_eq ! ( b"bar" , & buf) ;
2169
+ }
0 commit comments