content: module CaseSpec (main, spec) where
  
  import           Test.Hspec
  
  import Language.Haskell.Refact.Refactoring.Case
  
  import TestUtils
  
  import System.Directory
  
  main :: IO ()
  main = do
    hspec spec
  
  spec :: Spec
  spec = do
    describe "ifToCase" $ do
      it "converts an if expression to a case expression BSimple" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/BSimple.hs" (4,7) (4,43)
        -- r <- ct $ ifToCase logTestSettings testOptions  "Case/BSimple.hs" (4,7) (4,43)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/BSimple.hs"]
        diff <- compareFiles "./test/testdata/Case/BSimple.refactored.hs"
                             "./test/testdata/Case/BSimpleExpected.hs"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts an if expression to a case expression Foo" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/Foo.hs" (4,1) (9,1)
        -- r <- ct $ ifToCase logTestSettings testOptions  "Case/Foo.hs" (4,1) (9,1)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/Foo.hs"]
        diff <- compareFiles "./test/testdata/Case/Foo.refactored.hs"
                             "./test/testdata/Case/Foo.hs.expected"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts an if expression to a case expression B" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/B.hs" (4,7) (4,43)
        -- r <- ct $ ifToCase logTestSettings testOptions  "Case/B.hs" (4,7) (4,43)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/B.hs"]
        diff <- compareFiles "./test/testdata/Case/B.refactored.hs"
                             "./test/testdata/Case/B.hs.expected"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts an if expression with comments to a case expression 1 C" $ do
  
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/C.hs" (5,7) (10,1)
        -- ct $ ifToCase logTestSettings testOptions "Case/C.hs" (5,7) (10,1)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/C.hs"]
        diff <- compareFiles "./test/testdata/Case/C.refactored.hs"
                             "./test/testdata/Case/C.hs.expected"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts an if expression with comments to a case expression 2 D" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/D.hs" (5,7) (12,1)
        -- ct $ ifToCase logTestSettings testOptions "Case/D.hs" (5,7) (12,1)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/D.hs"]
        diff <- compareFiles "./test/testdata/Case/D.refactored.hs"
                             "./test/testdata/Case/D.hs.expected"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts in complex sub level expression 2 E" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/E.hs" (7,8) (13,20)
        -- ct $ ifToCase logTestSettings testOptions "Case/E.hs" (7,8) (13,20)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/E.hs"]
        diff <- compareFiles "./test/testdata/Case/E.refactored.hs"
                             "./test/testdata/Case/E.hs.expected"
        diff `shouldBe` []
  
      -- ---------------------------------
  
      it "converts in complex sub level expression F" $ do
        r <- ct $ ifToCase defaultTestSettings testOptions "Case/F.hs" (4,7) (8,20)
        -- ct $ ifToCase logTestSettings testOptions "Case/F.hs" (4,7) (8,20)
        r' <- ct $ mapM makeRelativeToCurrentDirectory r
        r' `shouldBe` ["Case/F.hs"]
        diff <- compareFiles "./test/testdata/Case/F.refactored.hs"
                             "./test/testdata/Case/F.hs.expected"
        diff `shouldBe` []
  
     -- ---------------------------------
  
      it "complains if an if-then-else is not selected" $ do
        res <- catchException(ct $ ifToCase defaultTestSettings testOptions "Case/C.hs" (4,7) (9,1))
        -- ifToCase logTestSettings testOptions "./test/testdata/Case/C.hs" (4,7) (9,1)
        (show res) `shouldBe` "Just \"You haven't selected an if-then-else  expression!\""
  
  -- ---------------------------------------------------------------------
  -- Helper functions
  
  
  