import Data.List.Extra (trimEnd)
import Data.Maybe
import Test.Hls.Util
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.Ingredients.Rerun
import Test.Tasty.Runners ( listingTests, consoleTestReporter)
import System.Process
import System.Environment
main :: IO ()
main = do
flushStackEnvironment
defaultMainWithIngredients
[rerunningTests [listingTests, consoleTestReporter]] $
testGroup "haskell-language-server-wrapper" [projectGhcVersionTests]
projectGhcVersionTests :: TestTree
projectGhcVersionTests = testGroup "--project-ghc-version"
[ testCase "stack with ghc 8.10.4" $
testDir "test/wrapper/testdata/stack-8.10.4" "8.10.4"
, testCase "stack with ghc 8.8.3" $
testDir "test/wrapper/testdata/stack-8.8.3" "8.8.3"
, testCase "cabal with global ghc" $ do
ghcVer <- trimEnd <$> readProcess "ghc" ["--numeric-version"] ""
testDir "test/wrapper/testdata/cabal-cur-ver" ghcVer
]
testDir :: FilePath -> String -> Assertion
testDir dir expectedVer =
withCurrentDirectoryInTmp dir $ do
testExe <- fromMaybe "haskell-language-server-wrapper"
<$> lookupEnv "HLS_WRAPPER_TEST_EXE"
actualVer <- trimEnd <$> readProcess testExe ["--project-ghc-version"] ""
actualVer @?= expectedVer