You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

118 lines
2.7 KiB

  1. {-# LANGUAGE OverloadedStrings #-}
  2. module HPath.IO.RenameFileSpec where
  3. import Test.Hspec
  4. import HPath.IO.Errors
  5. import System.IO.Error
  6. (
  7. ioeGetErrorType
  8. )
  9. import GHC.IO.Exception
  10. (
  11. IOErrorType(..)
  12. )
  13. import Utils
  14. upTmpDir :: IO ()
  15. upTmpDir = do
  16. setTmpDir "RenameFileSpec"
  17. createTmpDir
  18. setupFiles :: IO ()
  19. setupFiles = do
  20. createRegularFile' "myFile"
  21. createSymlink' "myFileL" "myFile"
  22. createRegularFile' "alreadyExists"
  23. createDir' "alreadyExistsD"
  24. createDir' "dir"
  25. createDir' "noPerms"
  26. createDir' "noWritePerm"
  27. noPerms "noPerms"
  28. noWritableDirPerms "noWritePerm"
  29. writeFile' "myFile" "Blahfaselgagaga"
  30. cleanupFiles :: IO ()
  31. cleanupFiles = do
  32. normalDirPerms "noPerms"
  33. normalDirPerms "noWritePerm"
  34. deleteFile' "myFile"
  35. deleteFile' "myFileL"
  36. deleteFile' "alreadyExists"
  37. deleteDir' "alreadyExistsD"
  38. deleteDir' "dir"
  39. deleteDir' "noPerms"
  40. deleteDir' "noWritePerm"
  41. spec :: Spec
  42. spec = beforeAll_ (upTmpDir >> setupFiles) $ afterAll_ cleanupFiles $
  43. describe "HPath.IO.renameFile" $ do
  44. -- successes --
  45. it "renameFile, all fine" $
  46. renameFile' "myFile"
  47. "renamedFile"
  48. it "renameFile, all fine" $
  49. renameFile' "myFile"
  50. "dir/renamedFile"
  51. it "renameFile, all fine on symlink" $
  52. renameFile' "myFileL"
  53. "renamedFile"
  54. it "renameFile, all fine on directory" $
  55. renameFile' "dir"
  56. "renamedFile"
  57. -- posix failures --
  58. it "renameFile, source file does not exist" $
  59. renameFile' "fileDoesNotExist"
  60. "renamedFile"
  61. `shouldThrow`
  62. (\e -> ioeGetErrorType e == NoSuchThing)
  63. it "renameFile, can't write to output directory" $
  64. renameFile' "myFile"
  65. "noWritePerm/renamedFile"
  66. `shouldThrow`
  67. (\e -> ioeGetErrorType e == PermissionDenied)
  68. it "renameFile, can't open output directory" $
  69. renameFile' "myFile"
  70. "noPerms/renamedFile"
  71. `shouldThrow`
  72. (\e -> ioeGetErrorType e == PermissionDenied)
  73. it "renameFile, can't open source directory" $
  74. renameFile' "noPerms/myFile"
  75. "renamedFile"
  76. `shouldThrow`
  77. (\e -> ioeGetErrorType e == PermissionDenied)
  78. -- custom failures --
  79. it "renameFile, destination file already exists" $
  80. renameFile' "myFile"
  81. "alreadyExists"
  82. `shouldThrow`
  83. (\e -> ioeGetErrorType e == AlreadyExists)
  84. it "renameFile, move from file to dir" $
  85. renameFile' "myFile"
  86. "alreadyExistsD"
  87. `shouldThrow`
  88. (\e -> ioeGetErrorType e == AlreadyExists)
  89. it "renameFile, source and dest are same file" $
  90. renameFile' "myFile"
  91. "myFile"
  92. `shouldThrow`
  93. isSameFile