@@ -214,6 +214,102 @@ fn fat32_root_directory_listing() {
214
214
}
215
215
}
216
216
217
+ #[ test]
218
+ fn open_dir_twice ( ) {
219
+ let time_source = utils:: make_time_source ( ) ;
220
+ let disk = utils:: make_block_device ( utils:: DISK_SOURCE ) . unwrap ( ) ;
221
+ let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
222
+
223
+ let fat32_volume = volume_mgr
224
+ . open_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) )
225
+ . expect ( "open volume 1" ) ;
226
+
227
+ let root_dir = volume_mgr
228
+ . open_root_dir ( fat32_volume)
229
+ . expect ( "open root dir" ) ;
230
+
231
+ let r = volume_mgr. open_root_dir ( fat32_volume) ;
232
+ let Err ( embedded_sdmmc:: Error :: DirAlreadyOpen ) = r else {
233
+ panic ! ( "Expected to fail opening the root dir twice: {r:?}" ) ;
234
+ } ;
235
+
236
+ let r = volume_mgr. open_dir ( root_dir, "README.TXT" ) ;
237
+ let Err ( embedded_sdmmc:: Error :: OpenedFileAsDir ) = r else {
238
+ panic ! ( "Expected to fail opening file as dir: {r:?}" ) ;
239
+ } ;
240
+
241
+ let test_dir = volume_mgr
242
+ . open_dir ( root_dir, "TEST" )
243
+ . expect ( "open test dir" ) ;
244
+
245
+ let r = volume_mgr. open_dir ( root_dir, "TEST" ) ;
246
+ let Err ( embedded_sdmmc:: Error :: DirAlreadyOpen ) = r else {
247
+ panic ! ( "Expected to fail opening the dir twice: {r:?}" ) ;
248
+ } ;
249
+
250
+ volume_mgr. close_dir ( root_dir) . expect ( "close root dir" ) ;
251
+ volume_mgr. close_dir ( test_dir) . expect ( "close test dir" ) ;
252
+
253
+ let r = volume_mgr. close_dir ( test_dir) ;
254
+ let Err ( embedded_sdmmc:: Error :: BadHandle ) = r else {
255
+ panic ! ( "Expected to fail closing the dir twice: {r:?}" ) ;
256
+ } ;
257
+ }
258
+
259
+ #[ test]
260
+ fn open_too_many_dirs ( ) {
261
+ let time_source = utils:: make_time_source ( ) ;
262
+ let disk = utils:: make_block_device ( utils:: DISK_SOURCE ) . unwrap ( ) ;
263
+ let mut volume_mgr: embedded_sdmmc:: VolumeManager <
264
+ utils:: RamDisk < Vec < u8 > > ,
265
+ utils:: TestTimeSource ,
266
+ 1 ,
267
+ 4 ,
268
+ 2 ,
269
+ > = embedded_sdmmc:: VolumeManager :: new_with_limits ( disk, time_source, 0x1000_0000 ) ;
270
+
271
+ let fat32_volume = volume_mgr
272
+ . open_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) )
273
+ . expect ( "open volume 1" ) ;
274
+ let root_dir = volume_mgr
275
+ . open_root_dir ( fat32_volume)
276
+ . expect ( "open root dir" ) ;
277
+
278
+ let Err ( embedded_sdmmc:: Error :: TooManyOpenDirs ) = volume_mgr. open_dir ( root_dir, "TEST" ) else {
279
+ panic ! ( "Expected to fail at opening too many dirs" ) ;
280
+ } ;
281
+ }
282
+
283
+ #[ test]
284
+ fn find_dir_entry ( ) {
285
+ let time_source = utils:: make_time_source ( ) ;
286
+ let disk = utils:: make_block_device ( utils:: DISK_SOURCE ) . unwrap ( ) ;
287
+ let mut volume_mgr = embedded_sdmmc:: VolumeManager :: new ( disk, time_source) ;
288
+
289
+ let fat32_volume = volume_mgr
290
+ . open_volume ( embedded_sdmmc:: VolumeIdx ( 1 ) )
291
+ . expect ( "open volume 1" ) ;
292
+
293
+ let root_dir = volume_mgr
294
+ . open_root_dir ( fat32_volume)
295
+ . expect ( "open root dir" ) ;
296
+
297
+ let dir_entry = volume_mgr
298
+ . find_directory_entry ( root_dir, "README.TXT" )
299
+ . expect ( "Find directory entry" ) ;
300
+ assert ! ( dir_entry. attributes. is_archive( ) ) ;
301
+ assert ! ( !dir_entry. attributes. is_directory( ) ) ;
302
+ assert ! ( !dir_entry. attributes. is_hidden( ) ) ;
303
+ assert ! ( !dir_entry. attributes. is_lfn( ) ) ;
304
+ assert ! ( !dir_entry. attributes. is_system( ) ) ;
305
+ assert ! ( !dir_entry. attributes. is_volume( ) ) ;
306
+
307
+ let r = volume_mgr. find_directory_entry ( root_dir, "README.TXS" ) ;
308
+ let Err ( embedded_sdmmc:: Error :: FileNotFound ) = r else {
309
+ panic ! ( "Expected not to find file: {r:?}" ) ;
310
+ } ;
311
+ }
312
+
217
313
// ****************************************************************************
218
314
//
219
315
// End Of File
0 commit comments