ghc-mod/test/CabalHelperSpec.hs
2015-03-28 19:13:48 +01:00

71 lines
2.5 KiB
Haskell

module CabalHelperSpec where
import Control.Arrow
import Control.Applicative
-- import Language.Haskell.GhcMod.CabalHelper
-- import Language.Haskell.GhcMod.PathsAndFiles
import Language.Haskell.GhcMod.Error
import Test.Hspec
-- import System.Directory
-- import System.FilePath
-- import System.Process (readProcess)
-- import Dir
-- import TestUtils
import Data.List
import Config (cProjectVersionInt)
ghcVersion :: Int
ghcVersion = read cProjectVersionInt
gmeProcessException :: GhcModError -> Bool
gmeProcessException GMEProcess {} = True
gmeProcessException _ = False
pkgOptions :: [String] -> [String]
pkgOptions [] = []
pkgOptions (_:[]) = []
pkgOptions (x:y:xs) | x == "-package-id" = [name y] ++ pkgOptions xs
| otherwise = pkgOptions (y:xs)
where
stripDash s = maybe s id $ (flip drop s . (+1) <$> findIndex (=='-') s)
name s = reverse $ stripDash $ stripDash $ reverse s
idirOpts :: [(c, [String])] -> [(c, [String])]
idirOpts = map (second $ map (drop 2) . filter ("-i"`isPrefixOf`))
spec :: Spec
spec = do return ()
-- describe "getGhcOptions" $ do
-- it "throws an exception if the cabal file is broken" $ do
-- let tdir = "test/data/broken-caba"
-- runD' tdir getGhcOptions `shouldThrow` anyIOException
-- it "handles sandboxes correctly" $ do
-- let tdir = "test/data/cabal-project"
-- cwd <- getCurrentDirectory
-- opts <- runD' tdir getGhcOptions
-- if ghcVersion < 706
-- then forM_ opts (\(_, o) -> o `shouldContain` ["-no-user-package-conf","-package-conf", cwd </> "test/data/cabal-project/.cabal-sandbox/"++ghcSandboxPkgDbDir])
-- else forM_ opts (\(_, o) -> o `shouldContain` ["-no-user-package-db","-package-db",cwd </> "test/data/cabal-project/.cabal-sandbox/"++ghcSandboxPkgDbDir])
-- it "extracts build dependencies" $ do
-- let tdir = "test/data/cabal-project"
-- opts <- runD' tdir getGhcOptions
-- let ghcOpts = snd $ head opts
-- pkgs = pkgOptions ghcOpts
-- pkgs `shouldBe` ["Cabal","base","template-haskell"]
-- it "uses non default flags" $ do
-- let tdir = "test/data/cabal-flags"
-- _ <- withDirectory_ tdir $
-- readProcess "cabal" ["configure", "-ftest-flag"] ""
-- opts <- runD' tdir getGhcOptions
-- let ghcOpts = snd $ head opts
-- pkgs = pkgOptions ghcOpts
-- pkgs `shouldBe` ["Cabal","base"]