packages feed

static-ls-0.1.2: test/StaticLS/HI/FileSpec.hs

module StaticLS.HI.FileSpec (spec)
where

import Control.Monad.Trans.Maybe (runMaybeT)
import StaticLS.HI.File
import StaticLS.StaticEnv
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 hi file" $ do
        describe "src file to hi file" $ do
            it "returns a valid hi file when called on a src file" $ do
                staticEnv <- Test.initStaticEnv
                hiFile <-
                    runStaticLs staticEnv $
                        runMaybeT $
                            srcFilePathToHiFilePath "test/TestData/Mod1.hs"
                print hiFile
                let relativeHiFile = makeRelative staticEnv.wsRoot <$> hiFile
                hiFileExists <- maybe (pure False) doesFileExist relativeHiFile

                relativeHiFile `shouldBe` Just "test/TestData/.hifiles/TestData/Mod1.hi"
                hiFileExists `shouldBe` True

            it "returns a valid hi file when called on a test/ file" $ do
                staticEnv <- Test.initStaticEnv
                hiFile <-
                    runStaticLs staticEnv $
                        runMaybeT $
                            srcFilePathToHiFilePath "test/TestData/Mod1.hs"
                let relativeHiFile = makeRelative staticEnv.wsRoot <$> hiFile
                hiFileExists <- maybe (pure False) doesFileExist relativeHiFile

                relativeHiFile `shouldBe` Just "test/TestData/.hifiles/TestData/Mod1.hi"
                hiFileExists `shouldBe` True

    describe "readHiFile" $ do
        it "Returns a valid hie file" $ do
            hiFile <- readHiFile "test/TestData/.hifiles/TestData/Mod1.hi"
            _ <- Test.assertJust "expected succesful read" hiFile
            (pure () :: IO ())

        it "Does not crash when given an invalid hie file to read " $ do
            hiFile <- readHiFile "./test/TestData/Mod1.hs"
            _ <- Test.assertNothing "expected failure" hiFile
            (pure () :: IO ())

        it "Does not crash when given no file to read" $ do
            hiFile <- readHiFile ""
            _ <- Test.assertNothing "expected failure" hiFile
            (pure () :: IO ())