2022-02-15 16:12:53 +03:00
|
|
|
module Base (
|
|
|
|
module Test.Tasty,
|
|
|
|
module Test.Tasty.HUnit,
|
|
|
|
module MiniJuvix.Prelude,
|
|
|
|
module Base
|
|
|
|
) where
|
|
|
|
|
|
|
|
import Test.Tasty
|
|
|
|
import Test.Tasty.HUnit
|
|
|
|
import MiniJuvix.Prelude
|
|
|
|
import qualified MiniJuvix.Syntax.Concrete.Language as M
|
|
|
|
import qualified MiniJuvix.Syntax.Concrete.Parser as M
|
|
|
|
import qualified MiniJuvix.Syntax.Concrete.Scoped.Scoper as M
|
|
|
|
|
|
|
|
parseModuleIO :: FilePath -> IO (M.Module 'M.Parsed 'M.ModuleTop)
|
|
|
|
parseModuleIO = fromRightIO id . M.runModuleParserIO
|
|
|
|
|
2022-02-18 15:01:42 +03:00
|
|
|
parseTextModuleIO :: Text -> IO (M.Module 'M.Parsed 'M.ModuleTop)
|
|
|
|
parseTextModuleIO = fromRightIO id . return . M.runModuleParser "literal string"
|
|
|
|
|
2022-02-15 16:12:53 +03:00
|
|
|
scopeModuleIO :: M.Module 'M.Parsed 'M.ModuleTop -> IO (M.Module 'M.Scoped 'M.ModuleTop)
|
2022-03-25 19:44:32 +03:00
|
|
|
scopeModuleIO = fmap snd . fromRightIO' printErrorAnsi . M.scopeCheck1IO "."
|
2022-02-15 16:12:53 +03:00
|
|
|
|
2022-02-18 15:01:42 +03:00
|
|
|
data AssertionDescr =
|
|
|
|
Single Assertion
|
|
|
|
| Steps ((String -> IO ()) -> Assertion)
|
|
|
|
|
2022-02-15 16:12:53 +03:00
|
|
|
data TestDescr = TestDescr {
|
|
|
|
testName :: String,
|
|
|
|
testRoot :: FilePath,
|
|
|
|
-- | relative to root
|
2022-02-18 15:01:42 +03:00
|
|
|
testAssertion :: AssertionDescr
|
2022-02-15 16:12:53 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
mkTest :: TestDescr -> TestTree
|
2022-02-18 15:01:42 +03:00
|
|
|
mkTest TestDescr {..} = case testAssertion of
|
|
|
|
Single assertion -> testCase testName $ withCurrentDirectory testRoot assertion
|
|
|
|
Steps steps -> testCaseSteps testName (withCurrentDirectory testRoot . steps)
|