packages feed

hls-stan-plugin-1.0.0.0: test/Main.hs

module Main
  ( main,
  )
where

import           Control.Lens            ((^.))
import           Control.Monad           (void)
import           Data.List               (find)
import           Data.Text               (Text)
import qualified Data.Text               as T
import qualified Data.Text.IO            as T
import qualified Ide.Plugin.Stan         as Stan
import qualified Language.LSP.Types.Lens as L
import           System.FilePath
import           Test.Hls

main :: IO ()
main = defaultTestRunner tests

tests :: TestTree
tests =
  testGroup
    "stan suggestions"
    [ testCase "provides diagnostics" $
        runStanSession "" $ do
          doc <- openDoc "test.hs" "haskell"
          diags@(reduceDiag : _) <- waitForDiagnosticsFromSource doc "stan"
          liftIO $ do
            length diags @?= 1
            reduceDiag ^. L.range @?= Range (Position 0 0) (Position 3 19)
            reduceDiag ^. L.severity @?= Just DsHint
            let expectedPrefix = " ✲ Name:        "
            assertBool "" $ T.isPrefixOf expectedPrefix (reduceDiag ^. L.message)
            reduceDiag ^. L.source @?= Just "stan"
          return ()
    ]

testDir :: FilePath
testDir = "test/testdata"

stanPlugin :: PluginDescriptor IdeState
stanPlugin = Stan.descriptor mempty "stan"

runStanSession :: FilePath -> Session a -> IO a
runStanSession subdir =
  failIfSessionTimeout . runSessionWithServer stanPlugin (testDir </> subdir)