Skip to content

Commit 85b522b

Browse files
committed
add test
1 parent 3c82625 commit 85b522b

File tree

1 file changed

+39
-15
lines changed

1 file changed

+39
-15
lines changed

test/system/test_filesystem.f90

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module 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

Comments
 (0)