{-# LANGUAGE OverloadedStrings #-} module HPath.IO.CanonicalizePathSpec where import Test.Hspec import System.IO.Error ( ioeGetErrorType ) import GHC.IO.Exception ( IOErrorType(..) ) import Utils upTmpDir :: IO () upTmpDir = do setTmpDir "CanonicalizePathSpec" createTmpDir setupFiles :: IO () setupFiles = do createRegularFile' "file" createDir' "dir" createSymlink' "dirSym" "dir/" createSymlink' "brokenSym" "nothing" createSymlink' "fileSym" "file" cleanupFiles :: IO () cleanupFiles = do deleteFile' "file" deleteDir' "dir" deleteFile' "dirSym" deleteFile' "brokenSym" deleteFile' "fileSym" spec :: Spec spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $ describe "HPath.IO.canonicalizePath" $ do -- successes -- it "canonicalizePath, all fine" $ do path <- withTmpDir "file" return canonicalizePath' "file" `shouldReturn` path it "canonicalizePath, all fine" $ do path <- withTmpDir "dir" return canonicalizePath' "dir" `shouldReturn` path it "canonicalizePath, all fine" $ do path <- withTmpDir "file" return canonicalizePath' "fileSym" `shouldReturn` path it "canonicalizePath, all fine" $ do path <- withTmpDir "dir" return canonicalizePath' "dirSym" `shouldReturn` path -- posix failures -- it "canonicalizePath, broken symlink" $ canonicalizePath' "brokenSym" `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing) it "canonicalizePath, file does not exist" $ canonicalizePath' "nothingBlah" `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing)