{-# LANGUAGE OverloadedStrings #-} module HPath.IO.DeleteFileSpec where import Test.Hspec import HPath.IO import System.IO.Error ( ioeGetErrorType ) import System.Posix.Files.ByteString ( getSymbolicLinkStatus ) import GHC.IO.Exception ( IOErrorType(..) ) import Utils upTmpDir :: IO () upTmpDir = do setTmpDir "DeleteFileSpec" createTmpDir setupFiles :: IO () setupFiles = do createRegularFile' "foo" createSymlink' "syml" "foo" createDir' "dir" createDir' "noPerms" noPerms "noPerms" cleanupFiles :: IO () cleanupFiles = do normalDirPerms "noPerms" deleteFile' "foo" deleteFile' "syml" deleteDir' "dir" deleteDir' "noPerms" spec :: Spec spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $ describe "HPath.IO.deleteFile" $ do -- successes -- it "deleteFile, regular file, all fine" $ do createRegularFile' "testFile" deleteFile' "testFile" getSymbolicLinkStatus "testFile" `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing) it "deleteFile, symlink, all fine" $ do recreateSymlink' "syml" "testFile" Strict deleteFile' "testFile" getSymbolicLinkStatus "testFile" `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing) -- posix failures -- it "deleteFile, wrong file type (directory)" $ deleteFile' "dir" `shouldThrow` (\e -> ioeGetErrorType e == InappropriateType) it "deleteFile, file does not exist" $ deleteFile' "doesNotExist" `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing) it "deleteFile, can't read directory" $ deleteFile' "noPerms/blah" `shouldThrow` (\e -> ioeGetErrorType e == PermissionDenied)