packages feed

ghc-mod-5.1.0.0: test/MonadSpec.hs

{-# LANGUAGE ScopedTypeVariables #-}
module MonadSpec where

import Test.Hspec
import Dir
import TestUtils
import Control.Applicative
import Control.Exception
import Control.Monad.Error.Class

spec :: Spec
spec = do
    describe "When using GhcModT in a do block" $
        it "a pattern match failure causes a call to `fail` on ErrorT in the monad stack" $ do
             (a, _)
                 <- runGhcModT defaultOptions $
                       do
                         Just _ <- return Nothing
                         return "hello"
                     `catchError` (const $ fail "oh noes")
             a `shouldBe` (Left $ GMEString "oh noes")

    describe "runGhcModT" $
        it "complains if the cabal file fails to parse while a sandbox is present" $ withDirectory_ "test/data/broken-cabal" $ do
          shouldReturnError $ runD' (gmCradle <$> ask)

    describe "gmsGet/Put" $
        it "work" $ do
          (runD $ gmsPut (GhcModState Intelligent) >> gmsGet)
            `shouldReturn` (GhcModState Intelligent)

    describe "liftIO" $ do
        it "converts user errors to GhcModError" $ do
            shouldReturnError $
                runD' $ liftIO $ throw (userError "hello") >> return ""

        it "converts a file not found exception to GhcModError" $ do
            shouldReturnError $
                runD' $ liftIO $ readFile "/DOES_NOT_EXIST" >> return ""