|
- {-# LANGUAGE OverloadedStrings #-}
-
- module HPath.IO.RecreateSymlinkOverwriteSpec where
-
-
- -- TODO: exception if destination exists but is not a file + `OverWrite` CopyMode
-
-
- import Test.Hspec
- import HPath.IO
- import HPath.IO.Errors
- import System.IO.Error
- (
- ioeGetErrorType
- )
- import GHC.IO.Exception
- (
- IOErrorType(..)
- )
- import Utils
-
-
- upTmpDir :: IO ()
- upTmpDir = do
- setTmpDir "RecreateSymlinkOverwriteSpec"
- createTmpDir
-
-
- setupFiles :: IO ()
- setupFiles = do
- createRegularFile' "myFile"
- createSymlink' "myFileL" "myFile"
- createRegularFile' "alreadyExists"
- createDir' "alreadyExistsD"
- createDir' "dir"
- createDir' "noPerms"
- createDir' "noWritePerm"
- createDir' "alreadyExistsD2"
- createRegularFile' "alreadyExistsD2/lala"
- noPerms "noPerms"
- noWritableDirPerms "noWritePerm"
- writeFile' "myFile" "Blahfaselgagaga"
-
-
- cleanupFiles :: IO ()
- cleanupFiles = do
- normalDirPerms "noPerms"
- normalDirPerms "noWritePerm"
- deleteFile' "myFile"
- deleteFile' "myFileL"
- deleteFile' "alreadyExists"
- deleteFile' "alreadyExistsD2/lala"
- deleteDir' "alreadyExistsD"
- deleteDir' "alreadyExistsD2"
- deleteDir' "dir"
- deleteDir' "noPerms"
- deleteDir' "noWritePerm"
-
-
- spec :: Spec
- spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $
- describe "HPath.IO.recreateSymlink" $ do
-
- -- successes --
- it "recreateSymLink (Overwrite), all fine" $ do
- recreateSymlink' "myFileL"
- "movedFile"
- Overwrite
- removeFileIfExists "movedFile"
-
- it "recreateSymLink (Overwrite), all fine" $ do
- recreateSymlink' "myFileL"
- "dir/movedFile"
- Overwrite
- removeFileIfExists "dir/movedFile"
-
- it "recreateSymLink (Overwrite), destination file already exists" $
- recreateSymlink' "myFileL"
- "alreadyExists"
- Overwrite
-
- it "recreateSymLink (Overwrite), destination already exists and is an empty dir" $ do
- recreateSymlink' "myFileL"
- "alreadyExistsD"
- Overwrite
- deleteFile' "alreadyExistsD"
- createDir' "alreadyExistsD"
-
- -- posix failures --
- it "recreateSymLink (Overwrite), destination already exists and is a non-empty dir" $
- recreateSymlink' "myFileL"
- "alreadyExistsD2"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == UnsatisfiedConstraints)
-
- it "recreateSymLink (Overwrite), wrong input type (file)" $
- recreateSymlink' "myFile"
- "movedFile"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == InvalidArgument)
-
- it "recreateSymLink (Overwrite), wrong input type (directory)" $
- recreateSymlink' "dir"
- "movedFile"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == InvalidArgument)
-
- it "recreateSymLink (Overwrite), can't write to destination directory" $
- recreateSymlink' "myFileL"
- "noWritePerm/movedFile"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- it "recreateSymLink (Overwrite), can't open destination directory" $
- recreateSymlink' "myFileL"
- "noPerms/movedFile"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- it "recreateSymLink (Overwrite), can't open source directory" $
- recreateSymlink' "noPerms/myFileL"
- "movedFile"
- Overwrite
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- -- custom failures --
- it "recreateSymLink (Overwrite), source and destination are the same file" $
- recreateSymlink' "myFileL"
- "myFileL"
- Overwrite
- `shouldThrow`
- isSameFile
|