HaRe-0.8.4.0: test/DeleteDefSpec.hs
module DeleteDefSpec (main, spec) where
import Test.Hspec
import Language.Haskell.Refact.Refactoring.DeleteDef
import System.Directory
import TestUtils
main :: IO ()
main = do
hspec spec
spec :: Spec
spec = do
describe "doDeleteDef" $ do
it "removes a small definition from the top level of a function" $ do
res <- ct $ deleteDef defaultTestSettings testOptions "./DeleteDef/Dd1.hs" (5,1)
res' <- ct $ mapM makeRelativeToCurrentDirectory res
res' `shouldBe` ["DeleteDef/Dd1.hs"]
diff <- ct $ compareFiles "./DeleteDef/Dd1.refactored.hs"
"./DeleteDef/Dd1.hs.expected"
diff `shouldBe` []
it "checks that a definition used in another module is not deleted" $ do
res <- ct $ catchException (deleteDef defaultTestSettings testOptions "./DeleteDef/Dd2.hs" (4,1))
(show res) `shouldBe` "Just \"The def to be deleted is still being used\""
it "checks that a definition used in the same module is not deleted" $ do
res <- ct $ catchException (deleteDef defaultTestSettings testOptions "./DeleteDef/Dd3.hs" (4,1))
(show res) `shouldBe` "Just \"The def to be deleted is still being used\""
it "checks that a recursive definition can be deleted" $ do
res <- ct $ deleteDef defaultTestSettings testOptions "./DeleteDef/Dd1.hs" (21,1)
res' <- ct $ mapM makeRelativeToCurrentDirectory res
res' `shouldBe` ["DeleteDef/Dd1.hs"]
diff <- ct $ compareFiles "./DeleteDef/Dd1.refactored.hs"
"./DeleteDef/Dd1.hs.expected2"
diff `shouldBe` []
it "checks possible bug found by tests in unwrap type synonym" $ do
res <- ct $ deleteDef defaultTestSettings testOptions "./DeleteDef/UTS1.hs" (3,6)
res' <- ct $ mapM makeRelativeToCurrentDirectory res
res' `shouldBe` ["DeleteDef/UTS1.hs"]
diff <- ct $ compareFiles "./DeleteDef/UTS1.hs.expected" "./DeleteDef/UTS1.refactored.hs"
diff `shouldBe` []