@@ -18,7 +18,7 @@ use crate::char::MAX_LEN_UTF8;
18
18
target_vendor = "apple" ,
19
19
) ) ]
20
20
use crate :: fs:: TryLockError ;
21
- use crate :: fs:: { self , File , FileTimes , OpenOptions , create_dir} ;
21
+ use crate :: fs:: { self , File , FileTimes , OpenOptions , create_dir, exists } ;
22
22
use crate :: io:: prelude:: * ;
23
23
use crate :: io:: { BorrowedBuf , ErrorKind , SeekFrom } ;
24
24
use crate :: mem:: MaybeUninit ;
@@ -2131,13 +2131,7 @@ fn test_dir_remove_file() {
2131
2131
drop ( f) ;
2132
2132
let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2133
2133
check ! ( dir. remove_file( "foo.txt" ) ) ;
2134
- let result = File :: open ( tmpdir. join ( "foo.txt" ) ) ;
2135
- #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2136
- error ! ( result, "No such file or directory" ) ;
2137
- #[ cfg( target_os = "vxworks" ) ]
2138
- error ! ( result, "no such file or directory" ) ;
2139
- #[ cfg( windows) ]
2140
- error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2134
+ assert ! ( !matches!( exists( tmpdir. join( "foo.txt" ) ) , Ok ( true ) ) ) ;
2141
2135
}
2142
2136
2143
2137
#[ test]
@@ -2146,13 +2140,7 @@ fn test_dir_remove_dir() {
2146
2140
check ! ( create_dir( tmpdir. join( "foo" ) ) ) ;
2147
2141
let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2148
2142
check ! ( dir. remove_dir( "foo" ) ) ;
2149
- let result = Dir :: new ( tmpdir. join ( "foo" ) ) ;
2150
- #[ cfg( all( unix, not( target_os = "vxworks" ) ) ) ]
2151
- error ! ( result, "No such file or directory" ) ;
2152
- #[ cfg( target_os = "vxworks" ) ]
2153
- error ! ( result, "no such file or directory" ) ;
2154
- #[ cfg( windows) ]
2155
- error ! ( result, 2 ) ; // ERROR_FILE_NOT_FOUND
2143
+ assert ! ( !matches!( exists( tmpdir. join( "foo" ) ) , Ok ( true ) ) ) ;
2156
2144
}
2157
2145
2158
2146
#[ test]
@@ -2177,3 +2165,39 @@ fn test_dir_create_dir() {
2177
2165
check ! ( dir. create_dir( "foo" ) ) ;
2178
2166
check ! ( Dir :: new( tmpdir. join( "foo" ) ) ) ;
2179
2167
}
2168
+
2169
+ #[ test]
2170
+ fn test_dir_open_dir ( ) {
2171
+ let tmpdir = tmpdir ( ) ;
2172
+ let dir1 = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2173
+ check ! ( dir1. create_dir( "foo" ) ) ;
2174
+ let dir2 = check ! ( Dir :: new( tmpdir. path( ) . join( "foo" ) ) ) ;
2175
+ let mut f = check ! ( dir2. open_with( "bar.txt" , & OpenOptions :: new( ) . create( true ) . write( true ) ) ) ;
2176
+ check ! ( f. write( b"baz" ) ) ;
2177
+ check ! ( f. flush( ) ) ;
2178
+ drop ( f) ;
2179
+ let dir3 = check ! ( dir1. open_dir( "foo" ) ) ;
2180
+ let mut f = check ! ( dir3. open( "bar.txt" ) ) ;
2181
+ let mut buf = [ 0u8 ; 3 ] ;
2182
+ check ! ( f. read_exact( & mut buf) ) ;
2183
+ assert_eq ! ( b"baz" , & buf) ;
2184
+ }
2185
+
2186
+ #[ test]
2187
+ fn test_dir_symlink ( ) {
2188
+ let tmpdir = tmpdir ( ) ;
2189
+ if !got_symlink_permission ( & tmpdir) {
2190
+ return ;
2191
+ } ;
2192
+
2193
+ let dir = check ! ( Dir :: new( tmpdir. path( ) ) ) ;
2194
+ let mut f = check ! ( dir. open_with( "foo.txt" , & OpenOptions :: new( ) . write( true ) . create( true ) ) ) ;
2195
+ check ! ( f. write( b"quux" ) ) ;
2196
+ check ! ( f. flush( ) ) ;
2197
+ drop ( f) ;
2198
+ check ! ( dir. symlink( "foo.txt" , "bar.txt" ) ) ;
2199
+ let mut f = check ! ( dir. open( "bar.txt" ) ) ;
2200
+ let mut buf = [ 0u8 ; 4 ] ;
2201
+ check ! ( f. read_exact( & mut buf) ) ;
2202
+ assert_eq ! ( b"quux" , & buf) ;
2203
+ }
0 commit comments