11module test_filesystem
22 use testdrive, only : new_unittest, unittest_type, error_type, check, skip_test
33 use stdlib_system, only: is_directory, delete_file, FS_ERROR, FS_ERROR_CODE, &
4- make_directory, remove_directory
4+ make_directory, remove_directory, make_directory_all, is_windows
55 use stdlib_error, only: state_type, STDLIB_FS_ERROR
66
77 implicit none
@@ -22,6 +22,7 @@ subroutine collect_suite(testsuite)
2222 new_unittest(" fs_delete_file_being_dir" , test_delete_directory), &
2323 new_unittest(" fs_make_dir" , test_make_directory), &
2424 new_unittest(" fs_make_dir_existing_dir" , test_make_directory_existing), &
25+ new_unittest(" fs_make_dir_all" , test_make_directory_all), &
2526 new_unittest(" fs_remove_dir" , test_remove_directory), &
2627 new_unittest(" fs_remove_dir_non_existent" , test_remove_directory_nonexistent) &
2728 ]
@@ -175,39 +176,39 @@ end subroutine test_delete_directory
175176 subroutine test_make_directory (error )
176177 type (error_type), allocatable , intent (out ) :: error
177178 type (state_type) :: err
178- character (len= 256 ) :: filename
179+ character (len= 256 ) :: dir_name
179180 integer :: ios,iocmd
180181 character (len= 512 ) :: msg
181182
182- filename = " test_directory"
183+ dir_name = " test_directory"
183184
184- call make_directory(filename , err= err)
185+ call make_directory(dir_name , err= err)
185186 call check(error, err% ok(), ' Could not make directory: ' // err% print ())
186187 if (allocated (error)) return
187188
188189 ! Clean up: remove the empty directory
189- call execute_command_line(' rmdir ' // filename , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
190+ call execute_command_line(' rmdir ' // dir_name , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
190191 call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory test: ' // trim (msg))
191192 end subroutine test_make_directory
192193
193194 subroutine test_make_directory_existing (error )
194195 type (error_type), allocatable , intent (out ) :: error
195196 type (state_type) :: err
196- character (len= 256 ) :: filename
197+ character (len= 256 ) :: dir_name
197198 integer :: ios,iocmd
198199 character (len= 512 ) :: msg
199200
200- filename = " test_directory"
201+ dir_name = " test_directory"
201202
202- call execute_command_line(' mkdir ' // filename , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
203+ call execute_command_line(' mkdir ' // dir_name , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
203204 call check(error, ios== 0 .and. iocmd== 0 , ' Cannot init make_directory_existing test: ' // trim (msg))
204205 if (allocated (error)) return
205206
206- call make_directory(filename , err= err)
207+ call make_directory(dir_name , err= err)
207208 call check(error, err% error(), ' Made an already existing directory somehow' )
208209
209210 ! Clean up: remove the empty directory
210- call execute_command_line(' rmdir ' // filename , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
211+ call execute_command_line(' rmdir ' // dir_name , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
211212
212213 if (allocated (error)) then
213214 ! if previous error is allocated as well
@@ -218,25 +219,48 @@ subroutine test_make_directory_existing(error)
218219 call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory test: ' // trim (msg))
219220 end subroutine test_make_directory_existing
220221
222+ subroutine test_make_directory_all (error )
223+ type (error_type), allocatable , intent (out ) :: error
224+ type (state_type) :: err
225+ character (len= 256 ) :: dir_name
226+ integer :: ios,iocmd
227+ character (len= 512 ) :: msg
228+
229+ dir_name = " d1/d2/d3/d4/"
230+
231+ call make_directory_all(dir_name, err= err)
232+ call check(error, err% ok(), ' Could not make all directories: ' // err% print ())
233+ if (allocated (error)) return
234+
235+ ! Clean up: remove the empty directory
236+ if (is_windows()) then
237+ call execute_command_line(' rmdir /s /q ' // dir_name, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
238+ else
239+ call execute_command_line(' rm -rf ' // dir_name, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
240+ end if
241+
242+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory_all test: ' // trim (msg))
243+ end subroutine test_make_directory_all
244+
221245 subroutine test_remove_directory (error )
222246 type (error_type), allocatable , intent (out ) :: error
223247 type (state_type) :: err
224- character (len= 256 ) :: filename
248+ character (len= 256 ) :: dir_name
225249 integer :: ios,iocmd
226250 character (len= 512 ) :: msg
227251
228- filename = " test_directory"
252+ dir_name = " test_directory"
229253
230- call execute_command_line(' mkdir ' // filename , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
254+ call execute_command_line(' mkdir ' // dir_name , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
231255 call check(error, ios== 0 .and. iocmd== 0 , ' Cannot init remove_directory test: ' // trim (msg))
232256 if (allocated (error)) return
233257
234- call remove_directory(filename , err)
258+ call remove_directory(dir_name , err)
235259 call check(error, err% ok(), ' Could not remove directory: ' // err% print ())
236260
237261 if (allocated (error)) then
238262 ! Clean up: remove the empty directory
239- call execute_command_line(' rmdir ' // filename , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
263+ call execute_command_line(' rmdir ' // dir_name , exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
240264 call check(error, ios== 0 .and. iocmd== 0 , error% message // ' and cannot cleanup make_directory test: ' // trim (msg))
241265 end if
242266 end subroutine test_remove_directory
0 commit comments