1
1
module test_filesystem
2
2
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
4
4
use stdlib_error, only: state_type
5
5
6
6
implicit none
@@ -17,7 +17,11 @@ subroutine collect_suite(testsuite)
17
17
new_unittest(" fs_is_directory_file" , test_is_directory_file), &
18
18
new_unittest(" fs_delete_non_existent" , test_delete_file_non_existent), &
19
19
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) &
21
25
]
22
26
end subroutine collect_suite
23
27
@@ -145,7 +149,79 @@ subroutine test_delete_directory(error)
145
149
if (allocated (error)) return
146
150
147
151
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"
148
161
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
149
225
150
226
end module test_filesystem
151
227
0 commit comments