@@ -164,7 +164,7 @@ func TestUnixFS(t *testing.T) {
164164 }
165165
166166 // Create multiple nested directories.
167- if err := fs .MkdirAll ("ima_directory/ima_directory/ima_directory/ima_directory" , 0o755 ); err != nil {
167+ if _ , err := fs .MkdirAll ("ima_directory/ima_directory/ima_directory/ima_directory" , 0o755 ); err != nil {
168168 t .Error (err )
169169 return
170170 }
@@ -174,7 +174,7 @@ func TestUnixFS(t *testing.T) {
174174 }
175175
176176 // Test creating a directory under a symlink with a pre-existing directory.
177- if err := fs .MkdirAll ("ima_bad_link/ima_directory/ima_bad_directory/ima_bad_directory" , 0o755 ); err == nil {
177+ if _ , err := fs .MkdirAll ("ima_bad_link/ima_directory/ima_bad_directory/ima_bad_directory" , 0o755 ); err == nil {
178178 t .Error ("expected an error" )
179179 return
180180 }
@@ -324,12 +324,58 @@ func TestUnixFS_MkdirAll(t *testing.T) {
324324 }
325325 defer fs .Cleanup ()
326326
327- if err := fs .MkdirAll ("/a/bunch/of/directories" , 0o755 ); err != nil {
328- t .Error (err )
329- return
330- }
327+ t .Run ("creates and reports every missing directory" , func (t * testing.T ) {
328+ created , err := fs .MkdirAll ("/a/bunch/of/directories" , 0o755 )
329+ if err != nil {
330+ t .Fatal (err )
331+ }
332+
333+ want := []string {"a" , "a/bunch" , "a/bunch/of" , "a/bunch/of/directories" }
334+ if ! slices .Equal (created , want ) {
335+ t .Errorf ("created = %v, want %v" , created , want )
336+ }
337+ // Sanity check that everything we reported actually exists on disk.
338+ for _ , dir := range want {
339+ st , err := os .Lstat (filepath .Join (fs .Root , dir ))
340+ if err != nil {
341+ t .Errorf ("Lstat %q: %v" , dir , err )
342+ continue
343+ }
344+ if ! st .IsDir () {
345+ t .Errorf ("%q is not a directory" , dir )
346+ }
347+ }
348+ })
349+
350+ t .Run ("only reports the directories it creates" , func (t * testing.T ) {
351+ if _ , err := fs .MkdirAll ("partial/exists" , 0o755 ); err != nil {
352+ t .Fatalf ("seeding directories: %v" , err )
353+ }
354+
355+ created , err := fs .MkdirAll ("partial/exists/and/more" , 0o755 )
356+ if err != nil {
357+ t .Fatal (err )
358+ }
359+
360+ want := []string {"partial/exists/and" , "partial/exists/and/more" }
361+ if ! slices .Equal (created , want ) {
362+ t .Errorf ("created = %v, want %v" , created , want )
363+ }
364+ })
331365
332- // TODO: stat sanity check
366+ t .Run ("reports nothing when the directory already exists" , func (t * testing.T ) {
367+ if _ , err := fs .MkdirAll ("already/here" , 0o755 ); err != nil {
368+ t .Fatalf ("seeding directories: %v" , err )
369+ }
370+
371+ created , err := fs .MkdirAll ("already/here" , 0o755 )
372+ if err != nil {
373+ t .Fatal (err )
374+ }
375+ if len (created ) != 0 {
376+ t .Errorf ("created = %v, want no directories" , created )
377+ }
378+ })
333379}
334380
335381func TestUnixFS_Open (t * testing.T ) {
0 commit comments