From 78fac664f39dc52818fb99264c258b822df7d5b9 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 5 Oct 2022 14:28:00 +0300 Subject: Refactor Env into LContext --- test/Spec.hs | 18 ++++++++++-------- test/TestUtils.hs | 21 +++++++++++---------- 2 files changed, 21 insertions(+), 18 deletions(-) (limited to 'test') diff --git a/test/Spec.hs b/test/Spec.hs index 1b712a8..710e528 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -5,32 +5,32 @@ import qualified Data.Map as M import Builtins import Tokenizer ( tokenize ) import Parser ( parse ) -import Evaluator ( evaluate ) -import Lib ( runInlineScript ) +import Interpreter ( evaluate, runInlineScript ) import Utils import TestUtils tokenizeTests = testGroup "tokenize" [ - do got <- expectSuccessL $ tokenize "" "(+ 1 (- 10 5))" + do (got, _) <- expectSuccessL M.empty $ tokenize "" "(+ 1 (- 10 5))" let expected = ["(", "+", "1", "(", "-", "10", "5", ")", ")"] assertEqual "" (map tokenContent got) expected ] parseTests = testGroup "parse" [ - do got <- expectSuccessL $ parse (map makeNonsenseToken ["(", "+", "1", "2", ")"]) + do (got, _) <- expectSuccessL M.empty $ parse (map makeNonsenseToken ["(", "+", "1", "2", ")"]) let expected = [astFunctionCall [ astSymbol "+", astInteger 1, astInteger 2 ]] assertEqual "" got expected - , do got <- expectErrorL $ parse (map makeNonsenseToken ["(", "+", "1", "2"]) + , do got <- expectErrorL M.empty $ parse (map makeNonsenseToken ["(", "+", "1", "2"]) let expected = "unbalanced function call" assertEqual "" got expected ] evaluateTests = testGroup "evaluate" [ do let env = M.fromList [builtinAdd2] :: Env - (gotEnv, gotAST) <- expectSuccessL $ evaluate 0 env (astFunctionCall - [astSymbol "+", astInteger 1, astInteger 2]) + (gotAST, LState { stateEnv = gotEnv }) <- expectSuccessL env $ + evaluate 0 (astFunctionCall [astSymbol "+", astInteger 1, astInteger 2]) + let expectedAST = astInteger 3 assertEqual "" gotAST expectedAST assertEqual "" (M.keys gotEnv) (M.keys env) @@ -39,7 +39,9 @@ evaluateTests = testGroup "evaluate" [ e2eTests = testGroup "e2e" [ do let env = M.fromList [builtinSubtract2] :: Env let script1 = "(let! sub2 (\\[a b] (- a b)))\n(sub2 3 2)" - (gotEnv, gotASTs) <- expectSuccessL $ runInlineScript "" env script1 + (gotASTs, LState { stateEnv = gotEnv }) <- expectSuccessL env $ + runInlineScript "" script1 + let expectedEnvKeys = ["-", "sub2"] assertEqual "" (M.keys gotEnv) expectedEnvKeys assertEqual "" (last gotASTs) (astInteger 1) diff --git a/test/TestUtils.hs b/test/TestUtils.hs index e497ece..e505de2 100644 --- a/test/TestUtils.hs +++ b/test/TestUtils.hs @@ -9,25 +9,26 @@ testConfig = Config { configVerboseMode = False, configShowHelp = False, configPrintEvaled = False, - configPrintCallStack = False + configPrintCallStack = False, + configUseREPL = False } -testRunL :: LContext a -> IO (Either LException a) -testRunL = runL testConfig +testRunL :: Env -> LContext a -> IO (Either LException (a, LState)) +testRunL env = runL LState { stateConfig = testConfig, stateEnv = env } -expectSuccessL :: LContext a -> IO a -expectSuccessL lc = - do res <- testRunL lc +expectSuccessL :: Env -> LContext a -> IO (a, LState) +expectSuccessL env lc = + do res <- testRunL env lc case res of Left (LException _ err) -> error $ "unexpected error: " ++ err Right val -> return val -expectErrorL :: Show a => LContext a -> IO String -expectErrorL lc = - do res <- testRunL lc +expectErrorL :: Show a => Env -> LContext a -> IO String +expectErrorL env lc = + do res <- testRunL env lc case res of Left (LException _ err) -> return err - Right val -> error $ "unexpected success: " ++ show val + Right (val, _) -> error $ "unexpected success: " ++ show val ast :: ASTNode -> AST ast node = AST { astNode = node } -- cgit v1.3