aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2022-09-26 11:35:17 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2022-12-05 14:21:53 +0200
commit73ae65e04f7c41dd676d3cbaf3885553352f688c (patch)
tree4f59a4a6163e9948b8fffd06fc70fc3fba090960
parent158b202ba113914a8aa1fc7a8a410d98bfb18f5b (diff)
Add e2e tests
-rw-r--r--app/Main.hs2
-rw-r--r--test/Spec.hs21
-rw-r--r--test/TestUtils.hs8
3 files changed, 20 insertions, 11 deletions
diff --git a/app/Main.hs b/app/Main.hs
index 4f69776..f546eae 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,7 +1,6 @@
module Main (main) where
import System.Environment
import Control.Monad.Except
-import Control.Monad.Reader
import System.Console.Haskeline
import Utils
import Builtins
@@ -64,4 +63,5 @@ main = do
putStrLn $ "Lang REPL"
putStrLn $ "Use CTRL+D to exit"
runInputT defaultSettings (repl config builtinEnv)
+
return ()
diff --git a/test/Spec.hs b/test/Spec.hs
index 9011aba..2a21d01 100644
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -6,6 +6,7 @@ import Builtins
import Tokenizer ( tokenize )
import Parser ( parse )
import Evaluator ( evaluate )
+import Lib ( runInlineScript )
import Utils
import TestUtils
@@ -18,8 +19,9 @@ tokenizeTests = TestLabel "tokenize" $ TestList $ map TestCase [
parseTests = TestLabel "parse" $ TestList $ map TestCase [
do got <- expectSuccessL $ parse ["(", "+", "1", "2", ")"]
let expected = [ASTFunctionCall [ASTSymbol "+", ASTInteger 1, ASTInteger 2]]
- assertEqual "" got expected,
- do got <- expectErrorL $ parse ["(", "+", "1", "2"]
+ assertEqual "" got expected
+
+ , do got <- expectErrorL $ parse ["(", "+", "1", "2"]
let expected = "unbalanced function call"
assertEqual "" got expected
]
@@ -32,10 +34,19 @@ evaluateTests = TestLabel "evaluate" $ TestList $ map TestCase [
assertEqual "" (M.keys gotEnv) (M.keys env)
]
+e2eTests = TestLabel "e2e" $ TestList $ map TestCase [
+ do let env = M.fromList [("-", builtinSubtract2)] :: Env
+ let script = "(let sub2 (\\[a b] (- a b)))"
+ gotEnv <- expectSuccessL $ runInlineScript env script
+ let expectedEnvKeys = ["-", "sub2"]
+ assertEqual "" (M.keys gotEnv) expectedEnvKeys
+ ]
+
tests = [
- tokenizeTests,
- parseTests,
- evaluateTests
+ tokenizeTests
+ , parseTests
+ , evaluateTests
+ , e2eTests
]
main :: IO ()
diff --git a/test/TestUtils.hs b/test/TestUtils.hs
index 676df1d..ad31c78 100644
--- a/test/TestUtils.hs
+++ b/test/TestUtils.hs
@@ -1,19 +1,17 @@
{-# OPTIONS_GHC -Wno-missing-export-lists #-}
module TestUtils where
-import Control.Monad.Except
-import Control.Monad.Reader
import Utils
-initialConfig :: Config
-initialConfig = Config {
+testConfig :: Config
+testConfig = Config {
configScriptFileName = Nothing,
configVerboseMode = False,
configShowHelp = False
}
testRunL :: LContext a -> IO (Either LException a)
-testRunL lc = runExceptT $ runReaderT lc initialConfig
+testRunL = runL testConfig
expectSuccessL :: LContext a -> IO a
expectSuccessL lc =