static-ls-0.1.0: test/StaticLS/HIE/FileSpec.hs
module StaticLS.HIE.FileSpec (spec) where
import Control.Monad.Trans.Except (runExceptT)
import Control.Monad.Trans.Maybe (runMaybeT)
import StaticLS.HIE.File
import StaticLS.StaticEnv
import StaticLS.StaticEnv.Options
import System.Directory
import System.FilePath
import Test.Hspec
import qualified TestImport as Test
import qualified TestImport.Assert as Test
spec :: Spec
spec = do
describe "Can convert from src to hie file" $ do
describe "src file to hie file" $ do
it "returns a valid hie file when called on a src file" $ do
staticEnv <- Test.initStaticEnv
hieFile <-
runStaticLs staticEnv $
runMaybeT $
srcFilePathToHieFilePath "src/StaticLS/HIE/File.hs"
let relativeHieFile = makeRelative staticEnv.wsRoot <$> hieFile
hieFileExists <- maybe (pure False) doesFileExist relativeHieFile
relativeHieFile `shouldBe` Just "test/TestData/.hiefiles/StaticLS/HIE/File.hie"
hieFileExists `shouldBe` True
it "returns a valid hie file when called on a test/ file" $ do
staticEnv <- Test.initStaticEnv
hieFile <-
runStaticLs staticEnv $
runMaybeT $
srcFilePathToHieFilePath "test/TestData/Mod1.hs"
let relativeHieFile = makeRelative staticEnv.wsRoot <$> hieFile
hieFileExists <- maybe (pure False) doesFileExist relativeHieFile
relativeHieFile `shouldBe` Just "test/TestData/.hiefiles/TestData/Mod1.hie"
hieFileExists `shouldBe` True
describe "getHieFile" $ do
it "Returns a valid hie file" $ do
staticEnv <- Test.initStaticEnv
hieFile <-
runStaticLs staticEnv $
runExceptT $
getHieFile "test/TestData/.hiefiles/TestData/Mod1.hie"
_ <- Test.assertRight "expected succesful read" hieFile
pure ()
it "Does not crash when given an invalid hie file to read " $ do
let emptyOpts =
StaticEnvOptions
{ optionHieDbPath = Nothing
, optionHieFilesPath = Nothing
}
staticEnv <- Test.initStaticEnvOpts emptyOpts
hieFile <-
runStaticLs staticEnv $
runExceptT $
getHieFile "./test/TestData/Mod1.hs"
_ <- Test.assertLeft "expected failure" hieFile
pure ()
it "Does not crash when given no file to read" $ do
let emptyOpts =
StaticEnvOptions
{ optionHieDbPath = Nothing
, optionHieFilesPath = Nothing
}
staticEnv <- Test.initStaticEnvOpts emptyOpts
hieFile <-
runStaticLs staticEnv $
runExceptT $
getHieFile ""
_ <- Test.assertLeft "expected failure" hieFile
pure ()