Let Cabal determine the package-db stack
This commit is contained in:
@@ -9,7 +9,7 @@ import Language.Haskell.GhcMod.Error
|
||||
import Test.Hspec
|
||||
import System.Directory
|
||||
import System.FilePath
|
||||
import System.Process (readProcess)
|
||||
import System.Process (readProcess, system)
|
||||
|
||||
import Dir
|
||||
import TestUtils
|
||||
@@ -51,8 +51,6 @@ spec = do
|
||||
-- comment in cabal-helper
|
||||
opts <- map gmcGhcOpts . filter ((/= ChSetupHsName) . gmcName) <$> runD' tdir getComponents
|
||||
|
||||
print opts
|
||||
|
||||
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])
|
||||
@@ -73,3 +71,25 @@ spec = do
|
||||
let ghcOpts = head opts
|
||||
pkgs = pkgOptions ghcOpts
|
||||
pkgs `shouldBe` ["Cabal","base"]
|
||||
|
||||
describe "getCustomPkgDbStack" $ do
|
||||
it "works" $ do
|
||||
let tdir = "test/data/custom-cradle"
|
||||
Just stack <- runD' tdir $ getCustomPkgDbStack
|
||||
stack `shouldBe` [ GlobalDb
|
||||
, UserDb
|
||||
, PackageDb "package-db-a"
|
||||
, PackageDb "package-db-b"
|
||||
, PackageDb "package-db-c"
|
||||
]
|
||||
|
||||
describe "getPackageDbStack'" $ do
|
||||
it "fixes out of sync custom pkg-db stack" $ do
|
||||
withDirectory_ "test/data/custom-cradle" $ do
|
||||
_ <- system "cabal configure"
|
||||
(s, s') <- runD $ do
|
||||
Just stack <- getCustomPkgDbStack
|
||||
withCabal $ do
|
||||
stack' <- getPackageDbStack'
|
||||
return (stack, stack')
|
||||
s' `shouldBe` s
|
||||
|
||||
@@ -9,7 +9,6 @@ import System.FilePath (pathSeparator)
|
||||
import Test.Hspec
|
||||
|
||||
import Dir
|
||||
import TestUtils
|
||||
|
||||
clean_ :: IO Cradle -> IO Cradle
|
||||
clean_ f = do
|
||||
@@ -40,10 +39,8 @@ spec = do
|
||||
cradleCurrentDir res `shouldBe` curDir
|
||||
cradleRootDir res `shouldBe` curDir
|
||||
cradleCabalFile res `shouldBe` Nothing
|
||||
cradlePkgDbStack res `shouldBe` [GlobalDb,UserDb]
|
||||
|
||||
it "finds a cabal file and a sandbox" $ do
|
||||
cwd <- getCurrentDirectory
|
||||
withDirectory "test/data/cabal-project/subdir1/subdir2" $ \dir -> do
|
||||
res <- relativeCradle dir <$> clean_ findCradle
|
||||
|
||||
@@ -55,10 +52,6 @@ spec = do
|
||||
cradleCabalFile res `shouldBe`
|
||||
Just ("test/data/cabal-project/cabalapi.cabal")
|
||||
|
||||
let [GlobalDb, sb] = cradlePkgDbStack res
|
||||
sb `shouldSatisfy`
|
||||
isPkgDbAt (cwd </> "test/data/cabal-project/.cabal-sandbox")
|
||||
|
||||
it "works even if a sandbox config file is broken" $ do
|
||||
withDirectory "test/data/broken-sandbox" $ \dir -> do
|
||||
res <- relativeCradle dir <$> clean_ findCradle
|
||||
@@ -70,13 +63,3 @@ spec = do
|
||||
|
||||
cradleCabalFile res `shouldBe`
|
||||
Just ("test" </> "data" </> "broken-sandbox" </> "dummy.cabal")
|
||||
|
||||
cradlePkgDbStack res `shouldBe` [GlobalDb, UserDb]
|
||||
|
||||
it "uses the custom cradle file if present" $ do
|
||||
withDirectory "test/data/custom-cradle" $ \dir -> do
|
||||
res <- relativeCradle dir <$> findCradle
|
||||
cradleCurrentDir res `shouldBe` "test" </> "data" </> "custom-cradle"
|
||||
cradleRootDir res `shouldBe` "test" </> "data" </> "custom-cradle"
|
||||
cradleCabalFile res `shouldBe` Just ("test" </> "data" </> "custom-cradle" </> "dummy.cabal")
|
||||
cradlePkgDbStack res `shouldBe` [PackageDb "a/packages", GlobalDb, PackageDb "b/packages", UserDb, PackageDb "c/packages"]
|
||||
|
||||
@@ -30,7 +30,10 @@ main = do
|
||||
|
||||
let caches = [ "setup-config"
|
||||
, "setup-config.ghc-mod.cabal-helper"
|
||||
, "setup-config.ghc-mod.cabal-components"
|
||||
, "setup-config.ghc-mod.resolved-components"
|
||||
, "setup-config.ghc-mod.package-options"
|
||||
, "setup-config.ghc-mod.package-db-stack"
|
||||
, "ghc-mod.cache"
|
||||
]
|
||||
cachesFindExp :: String
|
||||
|
||||
12
test/data/custom-cradle/custom-cradle.cabal
Normal file
12
test/data/custom-cradle/custom-cradle.cabal
Normal file
@@ -0,0 +1,12 @@
|
||||
name: custom-cradle
|
||||
version: 0.1.0.0
|
||||
homepage: asd
|
||||
license-file: LICENSE
|
||||
author: asd
|
||||
maintainer: asd
|
||||
build-type: Simple
|
||||
cabal-version: >=1.10
|
||||
|
||||
library
|
||||
build-depends: base >=4.7 && <4.8
|
||||
default-language: Haskell2010
|
||||
@@ -1 +0,0 @@
|
||||
dummy
|
||||
@@ -1,5 +0,0 @@
|
||||
a/packages
|
||||
global
|
||||
b/packages
|
||||
user
|
||||
c/packages
|
||||
5
test/data/custom-cradle/ghc-mod.package-db-stack
Normal file
5
test/data/custom-cradle/ghc-mod.package-db-stack
Normal file
@@ -0,0 +1,5 @@
|
||||
global
|
||||
user
|
||||
package-db-a
|
||||
package-db-b
|
||||
package-db-c
|
||||
0
test/data/custom-cradle/package-db-a/.gitkeep
Normal file
0
test/data/custom-cradle/package-db-a/.gitkeep
Normal file
0
test/data/custom-cradle/package-db-b/.gitkeep
Normal file
0
test/data/custom-cradle/package-db-b/.gitkeep
Normal file
0
test/data/custom-cradle/package-db-c/.gitkeep
Normal file
0
test/data/custom-cradle/package-db-c/.gitkeep
Normal file
Reference in New Issue
Block a user