@@ -214,6 +214,102 @@ fn fat32_root_directory_listing() {
214214 }
215215}
216216
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+
217313// ****************************************************************************
218314//
219315// End Of File
0 commit comments