Supporting sandbox sharing.
Braking backword compatibility of findCradle.
This commit is contained in:
@@ -21,7 +21,7 @@ spec = do
|
||||
describe "getCompilerOptions" $ do
|
||||
it "gets necessary CompilerOptions" $ do
|
||||
withDirectory "test/data/subdir1/subdir2" $ \dir -> do
|
||||
cradle <- findCradle Nothing "7.6.3"
|
||||
cradle <- findCradle
|
||||
pkgDesc <- parseCabalFile $ fromJust $ cradleCabalFile cradle
|
||||
res <- getCompilerOptions [] cradle pkgDesc
|
||||
let res' = res { includeDirs = map (toRelativeDir dir) (includeDirs res) }
|
||||
|
||||
@@ -12,26 +12,24 @@ spec = do
|
||||
describe "checkSyntax" $ do
|
||||
it "can check even if an executable depends on its library" $ do
|
||||
withDirectory_ "test/data/ghc-mod-check" $ do
|
||||
(strVer,_) <- getGHCVersion
|
||||
cradle <- findCradle Nothing strVer
|
||||
cradle <- findCradle
|
||||
res <- checkSyntax defaultOptions cradle ["main.hs"]
|
||||
res `shouldBe` "main.hs:5:1:Warning: Top-level binding with no type signature: main :: IO ()\NUL\n"
|
||||
|
||||
it "can check even if a test module imports another test module located at different directory" $ do
|
||||
withDirectory_ "test/data/check-test-subdir" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- checkSyntax defaultOptions cradle ["test/Bar/Baz.hs"]
|
||||
res `shouldSatisfy` (("test" </> "Foo.hs:3:1:Warning: Top-level binding with no type signature: foo :: [Char]\NUL\n") `isSuffixOf`)
|
||||
|
||||
it "can detect mutually imported modules" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
(strVer,_) <- getGHCVersion
|
||||
cradle <- findCradle Nothing strVer
|
||||
cradle <- findCradle
|
||||
res <- checkSyntax defaultOptions cradle ["Mutual1.hs"]
|
||||
res `shouldSatisfy` ("Module imports form a cycle" `isInfixOf`)
|
||||
|
||||
it "can check a module using QuasiQuotes" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- checkSyntax defaultOptions cradle ["Baz.hs"]
|
||||
res `shouldSatisfy` ("Baz.hs:5:1:Warning:" `isPrefixOf`)
|
||||
|
||||
@@ -3,7 +3,7 @@ module CradleSpec where
|
||||
import Control.Applicative
|
||||
import Language.Haskell.GhcMod
|
||||
import System.Directory (canonicalizePath)
|
||||
import System.FilePath (addTrailingPathSeparator, (</>))
|
||||
import System.FilePath ((</>))
|
||||
import Test.Hspec
|
||||
|
||||
import Dir
|
||||
@@ -14,7 +14,7 @@ spec = do
|
||||
it "returns the current directory" $ do
|
||||
withDirectory_ "/" $ do
|
||||
curDir <- canonicalizePath "/"
|
||||
res <- findCradle Nothing "7.4.1"
|
||||
res <- findCradle
|
||||
res `shouldBe` Cradle {
|
||||
cradleCurrentDir = curDir
|
||||
, cradleCabalDir = Nothing
|
||||
@@ -24,7 +24,7 @@ spec = do
|
||||
|
||||
it "finds a cabal file" $ do
|
||||
withDirectory "test/data/subdir1/subdir2" $ \dir -> do
|
||||
res <- relativeCradle dir <$> findCradle Nothing "7.4.1"
|
||||
res <- relativeCradle dir <$> findCradle
|
||||
res `shouldBe` Cradle {
|
||||
cradleCurrentDir = "test" </> "data" </> "subdir1" </> "subdir2"
|
||||
, cradleCabalDir = Just ("test" </> "data")
|
||||
@@ -34,7 +34,7 @@ spec = do
|
||||
|
||||
it "finds a sandbox" $ do
|
||||
withDirectory "test/data/subdir1/subdir2" $ \dir -> do
|
||||
res <- relativeCradle dir <$> findCradle Nothing "7.6.3"
|
||||
res <- relativeCradle dir <$> findCradle
|
||||
res `shouldBe` Cradle {
|
||||
cradleCurrentDir = "test" </> "data" </> "subdir1" </> "subdir2"
|
||||
, cradleCabalDir = Just ("test" </> "data")
|
||||
@@ -42,21 +42,17 @@ spec = do
|
||||
, cradlePackageConf = Just ("test" </> "data" </> ".cabal-sandbox" </> "i386-osx-ghc-7.6.3-packages.conf.d")
|
||||
}
|
||||
|
||||
it "finds a sandbox if exists" $ do
|
||||
it "works even if no cabal and no sandbox exist" $ do
|
||||
withDirectory "/" $ \dir -> do
|
||||
curDir <- canonicalizePath "/"
|
||||
res <- relativeCradle dir <$> findCradle (Just $ addTrailingPathSeparator dir ++ ("test" </> "data" </> ".cabal-sandbox")) "7.6.3"
|
||||
res <- relativeCradle dir <$> findCradle
|
||||
res `shouldBe` Cradle {
|
||||
cradleCurrentDir = curDir
|
||||
, cradleCabalDir = Nothing
|
||||
, cradleCabalFile = Nothing
|
||||
, cradlePackageConf = Just ("test" </> "data" </> ".cabal-sandbox" </> "i386-osx-ghc-7.6.3-packages.conf.d")
|
||||
, cradlePackageConf = Nothing
|
||||
}
|
||||
|
||||
it "throws an error if the sandbox does not exist" $ do
|
||||
withDirectory_ "/" $
|
||||
findCradle (Just "/") "7.4.1" `shouldThrow` anyIOException
|
||||
|
||||
relativeCradle :: FilePath -> Cradle -> Cradle
|
||||
relativeCradle dir cradle = Cradle {
|
||||
cradleCurrentDir = toRelativeDir dir $ cradleCurrentDir cradle
|
||||
|
||||
@@ -8,7 +8,7 @@ import Dir
|
||||
checkFast :: String -> String -> IO ()
|
||||
checkFast file ans = withDirectory_ "test/data" $ do
|
||||
(strVer,_) <- getGHCVersion
|
||||
cradle <- findCradle Nothing strVer
|
||||
cradle <- findCradle
|
||||
res <- debugInfo defaultOptions cradle strVer file
|
||||
lines res `shouldContain` [ans]
|
||||
|
||||
|
||||
@@ -13,39 +13,38 @@ spec = do
|
||||
describe "typeExpr" $ do
|
||||
it "shows types of the expression and its outers" $ do
|
||||
withDirectory_ "test/data/ghc-mod-check" $ do
|
||||
(strVer,_) <- getGHCVersion
|
||||
cradle <- findCradle Nothing strVer
|
||||
cradle <- findCradle
|
||||
res <- typeExpr defaultOptions cradle "Data/Foo.hs" "Data.Foo" 9 5
|
||||
res `shouldBe` "9 5 11 40 \"Int -> a -> a -> a\"\n7 1 11 40 \"Int -> Integer\"\n"
|
||||
|
||||
it "works with a module using TemplateHaskell" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- typeExpr defaultOptions cradle "Bar.hs" "Bar" 5 1
|
||||
res `shouldBe` unlines ["5 1 5 20 \"[Char]\""]
|
||||
|
||||
it "works with a module that imports another module using TemplateHaskell" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- typeExpr defaultOptions cradle "Main.hs" "Main" 3 8
|
||||
res `shouldBe` unlines ["3 8 3 16 \"String -> IO ()\"", "3 8 3 20 \"IO ()\"", "3 1 3 20 \"IO ()\""]
|
||||
|
||||
describe "infoExpr" $ do
|
||||
it "works for non-export functions" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- infoExpr defaultOptions cradle "Info.hs" "Info" "fib"
|
||||
res `shouldSatisfy` ("fib :: Int -> Int" `isPrefixOf`)
|
||||
|
||||
it "works with a module using TemplateHaskell" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- infoExpr defaultOptions cradle "Bar.hs" "Bar" "foo"
|
||||
res `shouldSatisfy` ("foo :: ExpQ" `isPrefixOf`)
|
||||
|
||||
it "works with a module that imports another module using TemplateHaskell" $ do
|
||||
withDirectory_ "test/data" $ do
|
||||
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
||||
cradle <- findCradle
|
||||
res <- infoExpr defaultOptions cradle "Main.hs" "Main" "bar"
|
||||
res `shouldSatisfy` ("bar :: [Char]" `isPrefixOf`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user