axel-0.0.13: test/Axel/Test/Haskell/ErrorSpec.hs
module Axel.Test.Haskell.ErrorSpec where
import Axel.Prelude
import Axel.Eff.App (AppEffs)
import qualified Axel.Eff.Console as Effs
import qualified Axel.Eff.Error as Effs
import qualified Axel.Eff.FileSystem as Effs
import qualified Axel.Eff.Ghci as Effs
import qualified Axel.Eff.Ghci as Ghci
import qualified Axel.Eff.Log as Effs
import qualified Axel.Eff.Process as Effs
import qualified Axel.Eff.Random as Effs
import qualified Axel.Eff.Resource as Effs
import qualified Axel.Eff.Time as Effs
import Axel.Haskell.File
import Axel.Sourcemap as SM
import Axel.Utils.FilePath
import Axel.Utils.Text
import Control.Lens
import qualified Data.Map as M
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Effectful as Eff
import qualified Effectful.Error.Static as Eff
import qualified Effectful.State.Static.Local as Eff
import Test.Tasty
import Test.Tasty.Golden
runApp :: Eff.Eff AppEffs a -> IO (Either Effs.Error a)
runApp =
Eff.runEff .
Effs.runTime .
Effs.runRandom .
Effs.runResource .
Effs.runProcess .
Effs.runGhci .
Effs.runFileSystem .
Effs.runConsole . Effs.ignoreLog . Eff.runErrorNoCallStack
test_errors_golden :: IO TestTree
test_errors_golden = do
axelFiles <-
map (FilePath . T.pack) <$>
findByExtension [".axel_golden"] "test/Axel/Test/Haskell/errors"
pure $
testGroup "error golden tests" $ do
axelFile <- axelFiles
let hsFile = replaceExtension axelFile "error_golden"
let transpiled = do
axelSource <- T.readFile $ T.unpack (op FilePath axelFile)
output <-
runApp $
Eff.evalState (M.empty :: ModuleInfo) $
Ghci.withGhci $ transpileSource (takeBaseName axelFile) axelSource
case output of
Right _ ->
error $
op FilePath axelFile <> " should have errored, but it didn't!"
Left err -> pure $ encodeUtf8Lazy $ Effs.renderError err
pure $
goldenVsString
(T.unpack . op FilePath $ takeBaseName axelFile)
(T.unpack . op FilePath $ hsFile)
transpiled