From bd70b8751a41b88d47b181869b9fc21a544c59be Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Tue, 3 May 2016 11:52:36 +0200 Subject: [PATCH] TESTS: add deleteDirRecursiveSpec --- test/Spec.hs | 71 ++++++++++++++++++++ test/deleteDirRecursiveSpec/.keep | 0 test/deleteDirRecursiveSpec/dir/.keep | 0 test/deleteDirRecursiveSpec/dirSym | 1 + test/deleteDirRecursiveSpec/file | 0 test/deleteDirRecursiveSpec/noPerms/.keep | 0 test/deleteDirRecursiveSpec/noWritable/.keep | 0 7 files changed, 72 insertions(+) create mode 100644 test/deleteDirRecursiveSpec/.keep create mode 100644 test/deleteDirRecursiveSpec/dir/.keep create mode 120000 test/deleteDirRecursiveSpec/dirSym create mode 100644 test/deleteDirRecursiveSpec/file create mode 100644 test/deleteDirRecursiveSpec/noPerms/.keep create mode 100644 test/deleteDirRecursiveSpec/noWritable/.keep diff --git a/test/Spec.hs b/test/Spec.hs index d9746ea..89f335a 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -673,6 +673,70 @@ deleteDirSpec = >> normalDirPerms "test/deleteDirSpec/noPerms" >> deleteDir' "test/deleteDirSpec/noPerms/foo" +deleteDirRecursiveSpec :: Spec +deleteDirRecursiveSpec = + describe "HSFM.FileSystem.FileOperations.deleteDirRecursive" $ do + + -- successes -- + it "deleteDirRecursive, empty directory, all fine" $ do + createDir'' "test/deleteDirRecursiveSpec/testDir" + deleteDirRecursive' "test/deleteDirRecursiveSpec/testDir" + getSymbolicLinkStatus "test/deleteDirRecursiveSpec/testDir" + `shouldThrow` + (\e -> ioeGetErrorType e == NoSuchThing) + + it "deleteDirRecursive, empty directory with null permissions, all fine" $ do + createDir'' "test/deleteDirRecursiveSpec/noPerms/testDir" + noPerms "test/deleteDirRecursiveSpec/noPerms/testDir" + deleteDirRecursive' "test/deleteDirRecursiveSpec/noPerms/testDir" + + it "deleteDirRecursive, non-empty directory, all fine" $ do + createDir'' "test/deleteDirRecursiveSpec/nonEmpty" + createDir'' "test/deleteDirRecursiveSpec/nonEmpty/dir1" + createDir'' "test/deleteDirRecursiveSpec/nonEmpty/dir2" + createDir'' "test/deleteDirRecursiveSpec/nonEmpty/dir2/dir3" + createRegularFile'' "test/deleteDirRecursiveSpec/nonEmpty/file1" + createRegularFile'' "test/deleteDirRecursiveSpec/nonEmpty/dir1/file2" + deleteDirRecursive' "test/deleteDirRecursiveSpec/nonEmpty" + getSymbolicLinkStatus "test/deleteDirRecursiveSpec/nonEmpty" + `shouldThrow` + (\e -> ioeGetErrorType e == NoSuchThing) + + -- posix failures -- + it "deleteDirRecursive, can't open parent directory" $ do + createDir'' "test/deleteDirRecursiveSpec/noPerms/foo" + noPerms "test/deleteDirRecursiveSpec/noPerms" + (deleteDirRecursive' "test/deleteDirRecursiveSpec/noPerms/foo" + `shouldThrow` + (\e -> ioeGetErrorType e == PermissionDenied)) + >> normalDirPerms "test/deleteDirRecursiveSpec/noPerms" + >> deleteDir' "test/deleteDirRecursiveSpec/noPerms/foo" + + it "deleteDirRecursive, can't write to parent directory" $ do + createDir'' "test/deleteDirRecursiveSpec/noWritable/foo" + noWritableDirPerms "test/deleteDirRecursiveSpec/noWritable" + (deleteDirRecursive' "test/deleteDirRecursiveSpec/noWritable/foo" + `shouldThrow` + (\e -> ioeGetErrorType e == PermissionDenied)) + normalDirPerms "test/deleteDirRecursiveSpec/noWritable" + deleteDir' "test/deleteDirRecursiveSpec/noWritable/foo" + + it "deleteDirRecursive, wrong file type (symlink to directory)" $ + deleteDirRecursive' "test/deleteDirRecursiveSpec/dirSym" + `shouldThrow` + (\e -> ioeGetErrorType e == InappropriateType) + + it "deleteDirRecursive, wrong file type (regular file)" $ + deleteDirRecursive' "test/deleteDirRecursiveSpec/file" + `shouldThrow` + (\e -> ioeGetErrorType e == InappropriateType) + + it "deleteDirRecursive, directory does not exist" $ + deleteDirRecursive' "test/deleteDirRecursiveSpec/doesNotExist" + `shouldThrow` + (\e -> ioeGetErrorType e == NoSuchThing) + + @@ -832,3 +896,10 @@ deleteDir' p = do pwd <- fromJust <$> getEnv "PWD" >>= P.parseAbs file <- (pwd P.) <$> P.parseRel p deleteDir file + + +deleteDirRecursive' :: ByteString -> IO () +deleteDirRecursive' p = do + pwd <- fromJust <$> getEnv "PWD" >>= P.parseAbs + dir <- (pwd P.) <$> P.parseRel p + deleteDirRecursive dir diff --git a/test/deleteDirRecursiveSpec/.keep b/test/deleteDirRecursiveSpec/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/deleteDirRecursiveSpec/dir/.keep b/test/deleteDirRecursiveSpec/dir/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/deleteDirRecursiveSpec/dirSym b/test/deleteDirRecursiveSpec/dirSym new file mode 120000 index 0000000..8724519 --- /dev/null +++ b/test/deleteDirRecursiveSpec/dirSym @@ -0,0 +1 @@ +dir \ No newline at end of file diff --git a/test/deleteDirRecursiveSpec/file b/test/deleteDirRecursiveSpec/file new file mode 100644 index 0000000..e69de29 diff --git a/test/deleteDirRecursiveSpec/noPerms/.keep b/test/deleteDirRecursiveSpec/noPerms/.keep new file mode 100644 index 0000000..e69de29 diff --git a/test/deleteDirRecursiveSpec/noWritable/.keep b/test/deleteDirRecursiveSpec/noWritable/.keep new file mode 100644 index 0000000..e69de29