diff options
| -rw-r--r-- | app/Main.hs | 2 | ||||
| -rw-r--r-- | src/Lib.hs | 6 | ||||
| -rw-r--r-- | test/Spec.hs | 15 |
3 files changed, 13 insertions, 10 deletions
diff --git a/app/Main.hs b/app/Main.hs index f546eae..113a3ba 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -28,7 +28,7 @@ repl config env = do Left (LException ex) -> do outputStrLn $ "Error: " ++ ex repl config env - Right newEnv -> do + Right (newEnv, _) -> do repl config newEnv main :: IO () @@ -12,12 +12,12 @@ import Tokenizer ( tokenize ) import Parser ( parse ) import Evaluator ( evaluate ) -runScriptFile :: Env -> String -> LContext Env +runScriptFile :: Env -> String -> LContext (Env, [AST]) runScriptFile env fileName = do src <- liftIO $ readFile fileName runInlineScript env src -runInlineScript :: Env -> String -> LContext Env +runInlineScript :: Env -> String -> LContext (Env, [AST]) runInlineScript env src = do tokenized <- tokenize src config <- ask @@ -28,7 +28,7 @@ runInlineScript env src = do liftIO $ putStrLn output (newEnv, evaluated) <- foldEvaluate env parsed liftIO $ mapM_ putStrLn (map show evaluated) - return newEnv + return (newEnv, evaluated) where foldEvaluate :: Env -> [AST] -> LContext (Env, [AST]) foldEvaluate accEnv [] = return (accEnv, []) diff --git a/test/Spec.hs b/test/Spec.hs index 2a21d01..6e8c9bf 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -10,13 +10,13 @@ import Lib ( runInlineScript ) import Utils import TestUtils -tokenizeTests = TestLabel "tokenize" $ TestList $ map TestCase [ +tokenizeTests = testGroup "tokenize" [ do got <- expectSuccessL $ tokenize "(+ 1 (- 10 5))" let expected = ["(", "+", "1", "(", "-", "10", "5", ")", ")"] assertEqual "" got expected ] -parseTests = TestLabel "parse" $ TestList $ map TestCase [ +parseTests = testGroup "parse" [ do got <- expectSuccessL $ parse ["(", "+", "1", "2", ")"] let expected = [ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]] assertEqual "" got expected @@ -26,7 +26,7 @@ parseTests = TestLabel "parse" $ TestList $ map TestCase [ assertEqual "" got expected ] -evaluateTests = TestLabel "evaluate" $ TestList $ map TestCase [ +evaluateTests = testGroup "evaluate" [ do let env = M.fromList [("+", builtinAdd2)] :: Env (gotEnv, gotAST) <- expectSuccessL $ evaluate env (ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]) let expectedAST = ASTInteger 3 @@ -34,14 +34,17 @@ evaluateTests = TestLabel "evaluate" $ TestList $ map TestCase [ assertEqual "" (M.keys gotEnv) (M.keys env) ] -e2eTests = TestLabel "e2e" $ TestList $ map TestCase [ +e2eTests = testGroup "e2e" [ do let env = M.fromList [("-", builtinSubtract2)] :: Env - let script = "(let sub2 (\\[a b] (- a b)))" - gotEnv <- expectSuccessL $ runInlineScript env script + let script1 = "(let sub2 (\\[a b] (- a b)))\n(sub2 3 2)" + (gotEnv, gotASTs) <- expectSuccessL $ runInlineScript env script1 let expectedEnvKeys = ["-", "sub2"] assertEqual "" (M.keys gotEnv) expectedEnvKeys + assertEqual "" (last gotASTs) (ASTInteger 1) ] +testGroup label xs = TestLabel label $ TestList $ map TestCase xs + tests = [ tokenizeTests , parseTests |
