|
- {-# LANGUAGE OverloadedStrings #-}
-
-
- module HPath.IO.CopyFileSpec where
-
-
- import Test.Hspec
- import HPath.IO
- import HPath.IO.Errors
- import System.IO.Error
- (
- ioeGetErrorType
- )
- import GHC.IO.Exception
- (
- IOErrorType(..)
- )
- import System.Exit
- import System.Process
- import Utils
- import Data.ByteString.UTF8 (toString)
-
-
-
- upTmpDir :: IO ()
- upTmpDir = do
- setTmpDir "CopyFileSpec"
- createTmpDir
-
- setupFiles :: IO ()
- setupFiles = do
- createRegularFile' "inputFile"
- createRegularFile' "alreadyExists"
- createSymlink' "inputFileSymL" "inputFile"
- createDir' "alreadyExistsD"
- createDir' "noPerms"
- createRegularFile' "noPerms/inputFile"
- createDir' "outputDirNoWrite"
- createDir' "wrongInput"
- noPerms "noPerms"
- noWritableDirPerms "outputDirNoWrite"
- writeFile' "inputFile" "Blahfaselgagaga"
-
-
- cleanupFiles :: IO ()
- cleanupFiles = do
- normalDirPerms "noPerms"
- normalDirPerms "outputDirNoWrite"
- deleteFile' "noPerms/inputFile"
- deleteFile' "inputFile"
- deleteFile' "alreadyExists"
- deleteFile' "inputFileSymL"
- deleteDir' "alreadyExistsD"
- deleteDir' "noPerms"
- deleteDir' "outputDirNoWrite"
- deleteDir' "wrongInput"
-
-
- spec :: Spec
- spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $
- describe "HPath.IO.copyFile" $ do
-
- -- successes --
- it "copyFile (Strict), everything clear" $ do
- copyFile' "inputFile"
- "outputFile"
- Strict
- removeFileIfExists "outputFile"
-
- it "copyFile (Strict), and compare" $ do
- tmpDir' <- getRawTmpDir
- copyFile' "inputFile"
- "outputFile"
- Strict
- (system $ "cmp -s " ++ toString tmpDir' ++ "inputFile" ++ " "
- ++ toString tmpDir' ++ "outputFile")
- `shouldReturn` ExitSuccess
- removeFileIfExists "outputFile"
-
- -- posix failures --
- it "copyFile (Strict), input file does not exist" $
- copyFile' "noSuchFile"
- "outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == NoSuchThing)
-
- it "copyFile (Strict), no permission to write to output directory" $
- copyFile' "inputFile"
- "outputDirNoWrite/outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- it "copyFile (Strict), cannot open output directory" $
- copyFile' "inputFile"
- "noPerms/outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- it "copyFile (Strict), cannot open source directory" $
- copyFile' "noPerms/inputFile"
- "outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == PermissionDenied)
-
- it "copyFile (Strict), wrong input type (symlink)" $
- copyFile' "inputFileSymL"
- "outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == InvalidArgument)
-
- it "copyFile (Strict), wrong input type (directory)" $
- copyFile' "wrongInput"
- "outputFile"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == InappropriateType)
-
- it "copyFile (Strict), output file already exists" $
- copyFile' "inputFile"
- "alreadyExists"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == AlreadyExists)
-
- it "copyFile (Strict), output file already exists and is a dir" $
- copyFile' "inputFile"
- "alreadyExistsD"
- Strict
- `shouldThrow`
- (\e -> ioeGetErrorType e == AlreadyExists)
-
- -- custom failures --
- it "copyFile (Strict), output and input are same file" $
- copyFile' "inputFile"
- "inputFile"
- Strict
- `shouldThrow`
- isSameFile
|