aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/Main.hs2
-rw-r--r--src/Lib.hs6
-rw-r--r--test/Spec.hs15
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 ()
diff --git a/src/Lib.hs b/src/Lib.hs
index 86f1d22..00d9f37 100644
--- a/src/Lib.hs
+++ b/src/Lib.hs
@@ -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