haskell-language-server-2.10.0.0: plugins/hls-cabal-gild-plugin/test/Main.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Main
( main
) where
import Ide.Logger
import qualified Ide.Plugin.Cabal as Cabal
import qualified Ide.Plugin.CabalGild as CabalGild
import System.Directory (findExecutable)
import System.FilePath
import Test.Hls
data TestLog
= LogCabalGild CabalGild.Log
| LogCabal Cabal.Log
instance Pretty TestLog where
pretty = \case
LogCabalGild msg -> pretty msg
LogCabal msg -> pretty msg
data CabalGildFound = Found | NotFound
isTestIsolated :: Bool
#if hls_isolate_cabalgild_tests
isTestIsolated = True
#else
isTestIsolated = False
#endif
isCabalFmtFound :: IO CabalGildFound
isCabalFmtFound = case isTestIsolated of
True -> pure Found
False -> do
cabalGild <- findExecutable "cabal-gild"
pure $ maybe NotFound (const Found) cabalGild
main :: IO ()
main = do
foundCabalFmt <- isCabalFmtFound
defaultTestRunner (tests foundCabalFmt)
cabalGildPlugin :: PluginTestDescriptor TestLog
cabalGildPlugin = mconcat
[ mkPluginTestDescriptor (CabalGild.descriptor . cmapWithPrio LogCabalGild) "cabal-gild"
, mkPluginTestDescriptor (Cabal.descriptor . cmapWithPrio LogCabal) "cabal"
]
tests :: CabalGildFound -> TestTree
tests found = testGroup "cabal-gild"
[ cabalGildGolden found "formats a simple document" "simple_testdata" "formatted_document" $ \doc -> do
formatDoc doc (FormattingOptions 2 True Nothing Nothing Nothing)
, cabalGildGolden found "formats a document with expand:src comment" "commented_testdata" "formatted_document" $ \doc -> do
formatDoc doc (FormattingOptions 2 True Nothing Nothing Nothing)
, cabalGildGolden found "formats a document with lib information" "lib_testdata" "formatted_document" $ \doc -> do
formatDoc doc (FormattingOptions 10 True Nothing Nothing Nothing)
]
cabalGildGolden :: CabalGildFound -> TestName -> FilePath -> FilePath -> (TextDocumentIdentifier -> Session ()) -> TestTree
cabalGildGolden NotFound title _ _ _ =
testCase title $
assertFailure $ "Couldn't find cabal-gild on PATH or this is not an isolated run. "
<> "Use cabal flag 'isolateCabalGildTests' to make it isolated or install cabal-gild locally."
cabalGildGolden Found title path desc act = goldenWithCabalDocFormatter def cabalGildPlugin "cabal-gild" conf title testDataDir path desc "cabal" act
where
conf = def
testDataDir :: FilePath
testDataDir = "plugins" </> "hls-cabal-gild-plugin" </> "test" </> "testdata"