HaRe-0.8.3.0: test/AddRmParamSpec.hs
module AddRmParamSpec (main, spec) where
import Test.Hspec
import Language.Haskell.Refact.Refactoring.AddRmParam
import TestUtils
import System.Directory
-- ---------------------------------------------------------------------
main :: IO ()
main = do
hspec spec
spec :: Spec
spec = do
describe "Adding" $ do
it "addOneParameter in D3 A3" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/D3.hs" "y" (7,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/D3.hs" "y" (7,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/D3.hs"
, "AddOneParameter/A3.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/D3.expected.hs"
"./AddOneParameter/D3.refactored.hs"
diffD `shouldBe` []
diffA <- ct $ compareFiles "./AddOneParameter/A3.expected.hs"
"./AddOneParameter/A3.refactored.hs"
diffA `shouldBe` []
-- -------------------
it "addOneParameter in D1 B1 C1 A1" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/D1.hs" "f" (10,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/D1.hs" "f" (10,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/D1.hs"
, "AddOneParameter/A1.hs"
, "AddOneParameter/C1.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/D1.expected.hs"
"./AddOneParameter/D1.refactored.hs"
diffD `shouldBe` []
diffC <- ct $ compareFiles "./AddOneParameter/C1.expected.hs"
"./AddOneParameter/C1.refactored.hs"
diffC `shouldBe` []
diffA <- ct $ compareFiles "./AddOneParameter/A1.expected.hs"
"./AddOneParameter/A1.refactored.hs"
diffA `shouldBe` []
-- -------------------
it "addOneParameter in D2 B2 C2 A2" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/D2.hs" "f" (11,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/D2.hs" "f" (11,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/D2.hs"
, "AddOneParameter/A2.hs"
, "AddOneParameter/C2.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/D2.expected.hs"
"./AddOneParameter/D2.refactored.hs"
diffD `shouldBe` []
diffC <- ct $ compareFiles "./AddOneParameter/C2.expected.hs"
"./AddOneParameter/C2.refactored.hs"
diffC `shouldBe` []
diffA <- ct $ compareFiles "./AddOneParameter/A2.expected.hs"
"./AddOneParameter/A2.refactored.hs"
diffA `shouldBe` []
-- -------------------
it "addOneParameter in PatIn1" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/PatIn1.hs" "x" (7,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/PatIn1.hs" "x" (7,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/PatIn1.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/PatIn1.expected.hs"
"./AddOneParameter/PatIn1.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in FunIn1" $ do
-- (["FunIn1.hs"],["y","7","1"]),
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn1.hs" "y" (7,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/FunIn1.hs" "y" (7,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/FunIn1.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/FunIn1.expected.hs"
"./AddOneParameter/FunIn1.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in FunIn2" $ do
-- (["FunIn2.hs"],["y","10","18"]),
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn2.hs" "y" (10,18)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/FunIn2.hs" "y" (10,18)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/FunIn2.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/FunIn2.expected.hs"
"./AddOneParameter/FunIn2.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in FunIn3" $ do
-- (["FunIn3.hs"],["y","9","11"]),
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn3.hs" "y" (9,11)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/FunIn3.hs" "y" (9,11)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/FunIn3.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/FunIn3.expected.hs"
"./AddOneParameter/FunIn3.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in FunIn4" $ do
-- (["FunIn4.hs"],["y","8","22"])],
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn4.hs" "y" (8,22)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/FunIn4.hs" "y" (8,22)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/FunIn4.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/FunIn4.expected.hs"
"./AddOneParameter/FunIn4.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in FunIn6" $ do
-- (["FunIn6.hs"],["y","8","22"])],
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn6.hs" "y" (9,7)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/FunIn6.hs" "y" (9,7)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/FunIn6.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/FunIn6.expected.hs"
"./AddOneParameter/FunIn6.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in Nested" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/Nested.hs" "y" (8,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/Nested.hs" "y" (8,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/Nested.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/Nested.expected.hs"
"./AddOneParameter/Nested.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "addOneParameter in MultiFun1" $ do
r <- ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/MultiFun1.hs" "x" (9,1)
-- r <- ct $ addOneParameter logTestSettings testOptions "./AddOneParameter/MultiFun1.hs" "x" (9,1)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "AddOneParameter/MultiFun1.hs"
]
diffD <- ct $ compareFiles "./AddOneParameter/MultiFun1.expected.hs"
"./AddOneParameter/MultiFun1.refactored.hs"
diffD `shouldBe` []
-- ---------------------------------
-- Negative tests
-- ---------------------------------
it "fails complex pat binding PatIn2" $ do
-- [(["PatIn2.hs"],["x","7","20"]),
res <- catchException (ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/PatIn2.hs" "x" (7,20))
(show res) `shouldBe` "Just \"Parameter can not be added to complex pattern binding\""
-- -------------------
it "fails name clash FunIn5" $ do
-- (["FunIn5.hs"],["h","8","1"])]
res <- catchException (ct $ addOneParameter defaultTestSettings testOptions "./AddOneParameter/FunIn5.hs" "h" (8,1))
(show res) `shouldBe` "Just \"The new parameter name will cause name clash or semantics change, please choose another name!\""
-- -------------------
{-
TestCases{refactorCmd="addOneParameter",
positive=[(["D3.hs","A3.hs"],["y","7","1"]),
(["D1.hs","C1.hs","A1.hs"],["f","10","1"]),
(["D2.hs","C2.hs","A2.hs"],["f","11","1"]),
(["PatIn1.hs"],["x","7","1"]),
(["FunIn1.hs"],["y","7","1"]),
(["FunIn2.hs"],["y","10","18"]),
(["FunIn3.hs"],["y","9","11"]),
(["FunIn4.hs"],["y","8","22"])],
negative=[(["PatIn2.hs"],["x","7","20"]),
(["FunIn5.hs"],["h","8","1"])]
-}
-- ---------------------------------
describe "Removing" $ do
it "rmOneParameter in D1 A1" $ do
-- (["D1.hs","A1.hs"],["6","19"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/D1.hs" (6,19)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/D1.hs" (6,19)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/D1.hs"
, "RmOneParameter/A1.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/D1.expected.hs"
"./RmOneParameter/D1.refactored.hs"
diffD `shouldBe` []
diffA <- ct $ compareFiles "./RmOneParameter/A1.expected.hs"
"./RmOneParameter/A1.refactored.hs"
diffA `shouldBe` []
-- -------------------
it "rmOneParameter in D2 A2" $ do
-- (["D2.hs","A2.hs"],["7","19"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/D2.hs" (7,19)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/D2.hs" (7,19)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/D2.hs"
, "RmOneParameter/A2.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/D2.expected.hs"
"./RmOneParameter/D2.refactored.hs"
diffD `shouldBe` []
diffA <- ct $ compareFiles "./RmOneParameter/A2.expected.hs"
"./RmOneParameter/A2.refactored.hs"
diffA `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn1" $ do
-- (["FunIn1.hs"],["8","5"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn1.hs" (8,5)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn1.hs" (8,5)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn1.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn1.expected.hs"
"./RmOneParameter/FunIn1.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn2" $ do
-- (["FunIn2.hs"],["8","5"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn2.hs" (8,5)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn2.hs" (8,5)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn2.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn2.expected.hs"
"./RmOneParameter/FunIn2.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn2a" $ do
-- (["FunIn2.hs"],["8","5"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn2a.hs" (8,5)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn2a.hs" (8,5)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn2a.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn2a.expected.hs"
"./RmOneParameter/FunIn2a.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn3" $ do
-- (["FunIn3.hs"],["7","5"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn3.hs" (7,5)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn3.hs" (7,5)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn3.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn3.expected.hs"
"./RmOneParameter/FunIn3.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn5" $ do
-- (["FunIn5.hs"],["7","6"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn5.hs" (7,6)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn5.hs" (7,6)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn5.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn5.expected.hs"
"./RmOneParameter/FunIn5.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn6" $ do
-- (["FunIn6.hs"],["7","5"]),
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn6.hs" (7,5)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn6.hs" (7,5)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn6.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn6.expected.hs"
"./RmOneParameter/FunIn6.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in FunIn0" $ do
-- (["FunIn0.hs"],["10","7"])],
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn0.hs" (10,7)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn0.hs" (10,7)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/FunIn0.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/FunIn0.expected.hs"
"./RmOneParameter/FunIn0.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in SubFun1" $ do
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/SubFun1.hs" (10,9)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/SubFun1.hs" (10,9)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/SubFun1.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/SubFun1.expected.hs"
"./RmOneParameter/SubFun1.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in SubFun2" $ do
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/SubFun2.hs" (10,9)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/SubFun2.hs" (10,9)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/SubFun2.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/SubFun2.expected.hs"
"./RmOneParameter/SubFun2.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in SubFun3" $ do
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/SubFun3.hs" (10,9)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/SubFun3.hs" (10,9)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/SubFun3.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/SubFun3.expected.hs"
"./RmOneParameter/SubFun3.refactored.hs"
diffD `shouldBe` []
-- -------------------
it "rmOneParameter in MultiFun1" $ do
r <- ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/MultiFun1.hs" (10,8)
-- r <- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/MultiFun1.hs" (10,8)
r' <- ct $ mapM makeRelativeToCurrentDirectory r
r' `shouldBe` [ "RmOneParameter/MultiFun1.hs"
]
diffD <- ct $ compareFiles "./RmOneParameter/MultiFun1.expected.hs"
"./RmOneParameter/MultiFun1.refactored.hs"
diffD `shouldBe` []
-- ---------------------------------
-- Negative tests
-- ---------------------------------
it "fails FunIn4" $ do
-- (["FunIn4.hs"],["7","6"]),
res <- catchException (ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn4.hs" (7,6))
-- ct $ rmOneParameter logTestSettings testOptions "./RmOneParameter/FunIn4.hs" (7,6)
(show res) `shouldBe` "Just \"This parameter can not be removed, as it is used!\""
-- -------------------
it "fails FunIn7" $ do
-- (["FunIn7.hs"],["10","4"])]
res <- catchException (ct $ rmOneParameter defaultTestSettings testOptions "./RmOneParameter/FunIn7.hs" (10,4))
(show res) `shouldBe` "Just \"Invalid cursor position!\""
-- -------------------
{-
TestCases{refactorCmd="rmOneParameter",
positive=[
(["D1.hs","A1.hs"],["6","19"]),
(["D2.hs","A2.hs"],["7","19"]),
(["FunIn1.hs"],["8","5"]),
(["FunIn2.hs"],["8","5"]),
(["FunIn3.hs"],["7","5"]),
(["FunIn5.hs"],["7","6"]),
(["FunIn6.hs"],["7","5"]),
(["FunIn0.hs"],["10","7"])],
negative=[(["FunIn4.hs"],["7","6"]),
(["FunIn7.hs"],["10","4"])]
}
TODO: Add a test for a PatBind too
-}