11module test_filesystem
22 use testdrive, only : new_unittest, unittest_type, error_type, check, skip_test
3- use stdlib_system, only: is_directory, delete_file
3+ use stdlib_system, only: is_directory, delete_file, make_directory, remove_directory
44 use stdlib_error, only: state_type
55
66 implicit none
@@ -17,7 +17,11 @@ subroutine collect_suite(testsuite)
1717 new_unittest(" fs_is_directory_file" , test_is_directory_file), &
1818 new_unittest(" fs_delete_non_existent" , test_delete_file_non_existent), &
1919 new_unittest(" fs_delete_existing_file" , test_delete_file_existing), &
20- new_unittest(" fs_delete_file_being_dir" , test_delete_directory) &
20+ new_unittest(" fs_delete_file_being_dir" , test_delete_directory), &
21+ new_unittest(" fs_make_dir" , test_make_directory), &
22+ new_unittest(" fs_make_dir_existing_dir" , test_make_directory_existing), &
23+ new_unittest(" fs_remove_dir" , test_remove_directory), &
24+ new_unittest(" fs_remove_dir_non_existent" , test_remove_directory_nonexistent) &
2125 ]
2226 end subroutine collect_suite
2327
@@ -145,7 +149,79 @@ subroutine test_delete_directory(error)
145149 if (allocated (error)) return
146150
147151 end subroutine test_delete_directory
152+
153+ subroutine test_make_directory (error )
154+ type (error_type), allocatable , intent (out ) :: error
155+ type (state_type) :: err
156+ character (len= 256 ) :: filename
157+ integer :: ios,iocmd
158+ character (len= 512 ) :: msg
159+
160+ filename = " test_directory"
148161
162+ call make_directory(filename, err= err)
163+ call check(error, err% ok(), ' Could not make directory: ' // err% print ())
164+ if (allocated (error)) return
165+
166+ ! Clean up: remove the empty directory
167+ call execute_command_line(' rmdir ' // filename, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
168+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory test: ' // trim (msg))
169+ if (allocated (error)) return
170+ end subroutine test_make_directory
171+
172+ subroutine test_make_directory_existing (error )
173+ type (error_type), allocatable , intent (out ) :: error
174+ type (state_type) :: err
175+ character (len= 256 ) :: filename
176+ integer :: ios,iocmd
177+ character (len= 512 ) :: msg
178+
179+ filename = " test_directory"
180+
181+ call execute_command_line(' mkdir ' // filename, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
182+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot init make_directory_existing test: ' // trim (msg))
183+ if (allocated (error)) return
184+
185+ call make_directory(filename, err= err)
186+ call check(error, err% error(), ' Made an already existing directory somehow' )
187+
188+ ! Clean up: remove the empty directory
189+ call execute_command_line(' rmdir ' // filename, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
190+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory test: ' // trim (msg))
191+ if (allocated (error)) return
192+ end subroutine test_make_directory_existing
193+
194+ subroutine test_remove_directory (error )
195+ type (error_type), allocatable , intent (out ) :: error
196+ type (state_type) :: err
197+ character (len= 256 ) :: filename
198+ integer :: ios,iocmd
199+ character (len= 512 ) :: msg
200+
201+ filename = " test_directory"
202+
203+ call execute_command_line(' mkdir ' // filename, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
204+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot init remove_directory test: ' // trim (msg))
205+ if (allocated (error)) return
206+
207+ call remove_directory(filename, err)
208+ call check(error, err% ok(), ' Could not remove directory: ' // err% print ())
209+ if (allocated (error)) then
210+ ! Clean up: remove the empty directory
211+ call execute_command_line(' rmdir ' // filename, exitstat= ios, cmdstat= iocmd, cmdmsg= msg)
212+ call check(error, ios== 0 .and. iocmd== 0 , ' Cannot cleanup make_directory test: ' // trim (msg))
213+ if (allocated (error)) return
214+ end if
215+ end subroutine test_remove_directory
216+
217+ subroutine test_remove_directory_nonexistent (error )
218+ type (error_type), allocatable , intent (out ) :: error
219+ type (state_type) :: err
220+
221+ call remove_directory(" random_name" , err)
222+ call check(error, err% error(), ' Somehow removed a non-existent directory!: ' )
223+ if (allocated (error)) return
224+ end subroutine test_remove_directory_nonexistent
149225
150226end module test_filesystem
151227
0 commit comments