static-ls-0.1.2: test/StaticLS/IDE/DefinitionSpec.hs
module StaticLS.IDE.DefinitionSpec (spec) where
import StaticLS.IDE.Definition
import StaticLS.StaticEnv
import StaticLS.StaticEnv.Options
import Test.Hspec
import qualified TestImport as Test
import qualified TestImport.Assert as Test
import qualified TestImport.TestData as Test
spec :: Spec
spec =
describe "Correctly retrieves definitions" $ do
describe "All available sources" $ do
it "retrieves the myFun definition from a different module" $ do
staticEnv <- Test.initStaticEnv
defnLinks <- runStaticLs staticEnv $ uncurry getDefinition Test.myFunRef1TdiAndPosition
defnLink <- Test.assertHead "no definition link found" defnLinks
expectedDefnLink <- Test.myFunDefDefinitionLink
defnLink `shouldBe` expectedDefnLink
describe "Missing sources" $ do
describe "Finding sources with only hie files" $ do
it "Missing hiedb" $ do
let emptyOpts =
StaticEnvOptions
{ optionHieDbPath = ""
, optionHieFilesPath = "test/TestData/.hiefiles"
, optionSrcDirs = defaultSrcDirs
, optionHiFilesPath = "test/TestData/.hifiles"
}
staticEnv <- Test.initStaticEnvOpts emptyOpts
defnLinks <- runStaticLs staticEnv $ uncurry getDefinition Test.myFunRef1TdiAndPosition
defnLink <- Test.assertHead "no definition link found" defnLinks
expectedDefnLink <- Test.myFunDefDefinitionLink
defnLink `shouldBe` expectedDefnLink
it "empty hiedb" $ do
let emptyOpts =
StaticEnvOptions
{ optionHieDbPath = "./TestData/not-a-real-hiedb-file"
, optionHieFilesPath = "test/TestData/.hiefiles"
, optionSrcDirs = defaultSrcDirs
, optionHiFilesPath = "test/TestData/.hifiles"
}
staticEnv <- Test.initStaticEnvOpts emptyOpts
defnLinks <- runStaticLs staticEnv $ uncurry getDefinition Test.myFunRef1TdiAndPosition
defnLink <- Test.assertHead "no definition link found" defnLinks
expectedDefnLink <- Test.myFunDefDefinitionLink
defnLink `shouldBe` expectedDefnLink
it "does not crash with missing all sources" $ do
let emptyOpts =
StaticEnvOptions
{ optionHieDbPath = ""
, optionHieFilesPath = ""
, optionSrcDirs = []
, optionHiFilesPath = ""
}
staticEnv <- Test.initStaticEnvOpts emptyOpts
locs <- runStaticLs staticEnv $ uncurry getDefinition Test.myFunRef1TdiAndPosition
locs `shouldBe` []