ghcide-2.1.0.0: test/exe/CPPTests.hs
module CPPTests (tests) where
import Control.Exception (catch)
import qualified Data.Text as T
import Development.IDE.Test (Cursor, expectDiagnostics,
expectNoMoreDiagnostics)
import Language.LSP.Protocol.Types hiding (SemanticTokenAbsolute (..),
SemanticTokenRelative (..),
SemanticTokensEdit (..), mkRange)
import Language.LSP.Test
-- import Test.QuickCheck.Instances ()
import Test.Tasty
import Test.Tasty.HUnit
import TestUtils
tests :: TestTree
tests =
testGroup "cpp"
[ ignoreInWindowsBecause "Throw a lsp session time out in windows for ghc-8.8 and is broken for other versions" $ testCase "cpp-error" $ do
let content =
T.unlines
[ "{-# LANGUAGE CPP #-}",
"module Testing where",
"#ifdef FOO",
"foo = 42"
]
-- The error locations differ depending on which C-preprocessor is used.
-- Some give the column number and others don't (hence maxBound == -1 unsigned). Assert either
-- of them.
(run $ expectError content (2, maxBound))
`catch` ( \e -> do
let _ = e :: HUnitFailure
run $ expectError content (2, 1)
)
, testSessionWait "cpp-ghcide" $ do
_ <- createDoc "A.hs" "haskell" $ T.unlines
["{-# LANGUAGE CPP #-}"
,"main ="
,"#ifdef __GHCIDE__"
," worked"
,"#else"
," failed"
,"#endif"
]
expectDiagnostics [("A.hs", [(DiagnosticSeverity_Error, (3, 2), "Variable not in scope: worked")])]
]
where
expectError :: T.Text -> Cursor -> Session ()
expectError content cursor = do
_ <- createDoc "Testing.hs" "haskell" content
expectDiagnostics
[ ( "Testing.hs",
[(DiagnosticSeverity_Error, cursor, "error: unterminated")]
)
]
expectNoMoreDiagnostics 0.5