mirror of
https://github.com/anoma/juvix.git
synced 2024-12-12 14:28:08 +03:00
a825f41507
Now the prelude exports this function: ``` readFile :: (MonadIO m) => Path Abs File -> m Text readFile = liftIO . Utf8.readFile . toFilePath ``` It is more convenient to use because it uses typed `Path` and works in any `MonadIO`.
33 lines
1.0 KiB
Haskell
33 lines
1.0 KiB
Haskell
module Reg.Parse.Base where
|
|
|
|
import Base
|
|
import Juvix.Compiler.Reg.Data.InfoTable
|
|
import Juvix.Compiler.Reg.Pretty
|
|
import Juvix.Compiler.Reg.Translation.FromSource
|
|
import Juvix.Data.PPOutput
|
|
|
|
regParseAssertion :: Path Abs File -> (String -> IO ()) -> Assertion
|
|
regParseAssertion mainFile step = do
|
|
step "Parse"
|
|
r <- parseFile mainFile
|
|
case r of
|
|
Left err -> assertFailure (show (pretty err))
|
|
Right tab -> do
|
|
withTempDir'
|
|
( \dirPath -> do
|
|
let outputFile = dirPath <//> $(mkRelFile "out.out")
|
|
step "Print"
|
|
writeFileEnsureLn outputFile (ppPrint tab tab)
|
|
step "Parse printed"
|
|
r' <- parseFile outputFile
|
|
case r' of
|
|
Left err -> assertFailure (show (pretty err))
|
|
Right tab' -> do
|
|
assertBool ("Check: print . parse = print . parse . print . parse") (ppPrint tab tab == ppPrint tab' tab')
|
|
)
|
|
|
|
parseFile :: Path Abs File -> IO (Either MegaparsecError InfoTable)
|
|
parseFile f = do
|
|
s <- readFile f
|
|
return (runParser f s)
|