2013-02-13 07:22:07 +00:00
|
|
|
module InfoSpec where
|
|
|
|
|
2013-03-14 14:24:36 +00:00
|
|
|
import Data.List (isPrefixOf)
|
2013-02-13 07:22:07 +00:00
|
|
|
import Expectation
|
2013-05-20 02:29:44 +00:00
|
|
|
import Language.Haskell.GhcMod
|
2013-03-31 13:55:37 +00:00
|
|
|
import System.Exit
|
2013-05-20 02:29:44 +00:00
|
|
|
import System.Process
|
|
|
|
import Test.Hspec
|
2013-02-13 07:22:07 +00:00
|
|
|
|
|
|
|
spec :: Spec
|
|
|
|
spec = do
|
|
|
|
describe "typeExpr" $ do
|
|
|
|
it "shows types of the expression and its outers" $ do
|
2013-03-05 01:22:33 +00:00
|
|
|
withDirectory_ "test/data/ghc-mod-check" $ do
|
2013-03-04 09:11:09 +00:00
|
|
|
(strVer,_) <- getGHCVersion
|
|
|
|
cradle <- findCradle Nothing strVer
|
2013-03-02 07:14:55 +00:00
|
|
|
res <- typeExpr defaultOptions cradle "Data.Foo" 9 5 "Data/Foo.hs"
|
2013-02-13 07:22:07 +00:00
|
|
|
res `shouldBe` "9 5 11 40 \"Int -> a -> a -> a\"\n7 1 11 40 \"Int -> Integer\"\n"
|
2013-03-14 14:24:36 +00:00
|
|
|
|
|
|
|
it "works with a module using TemplateHaskell" $ do
|
|
|
|
withDirectory_ "test/data" $ do
|
|
|
|
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
|
|
|
res <- typeExpr defaultOptions cradle "Bar" 5 1 "Bar.hs"
|
|
|
|
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
|
|
|
|
res <- typeExpr defaultOptions cradle "Main" 3 8 "Main.hs"
|
|
|
|
res `shouldBe` unlines ["3 8 3 16 \"String -> IO ()\"", "3 8 3 20 \"IO ()\"", "3 1 3 20 \"IO ()\""]
|
|
|
|
|
|
|
|
describe "infoExpr" $ do
|
2013-03-30 12:24:57 +00:00
|
|
|
it "works for non-export functions" $ do
|
|
|
|
withDirectory_ "test/data" $ do
|
|
|
|
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
|
|
|
res <- infoExpr defaultOptions cradle "Info" "fib" "Info.hs"
|
|
|
|
res `shouldSatisfy` ("fib :: Int -> Int" `isPrefixOf`)
|
2013-04-01 05:19:15 +00:00
|
|
|
|
2013-03-14 14:24:36 +00:00
|
|
|
it "works with a module using TemplateHaskell" $ do
|
|
|
|
withDirectory_ "test/data" $ do
|
|
|
|
cradle <- getGHCVersion >>= findCradle Nothing . fst
|
|
|
|
res <- infoExpr defaultOptions cradle "Bar" "foo" "Bar.hs"
|
|
|
|
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
|
|
|
|
res <- infoExpr defaultOptions cradle "Main" "bar" "Main.hs"
|
|
|
|
res `shouldSatisfy` ("bar :: [Char]" `isPrefixOf`)
|
2013-03-31 13:55:37 +00:00
|
|
|
|
|
|
|
it "doesn't fail on unicode output" $ do
|
|
|
|
code <- rawSystem "dist/build/ghc-mod/ghc-mod" ["info", "test/data/Unicode.hs", "Unicode", "unicode"]
|
|
|
|
code `shouldSatisfy` (== ExitSuccess)
|