hint-0.2.1: unit-tests/run-unit-tests.hs
import Control.Exception ( catchDyn )
import System.Directory ( removeFile )
import qualified Language.Haskell.Interpreter.GHC as H
test_reload_modified :: H.InterpreterSession -> IO Bool
test_reload_modified s = do writeFile mod_file mod_v1
f_v1 <- H.withSession s get_f
--
writeFile mod_file mod_v2
f_v2 <- H.withSession s get_f
--
removeFile mod_file
--
return $ (f_v1 5, f_v2 5) == (5, 6)
--
where mod_name = "TEST_ReloadModified"
mod_file = mod_name ++ ".hs"
--
mod_v1 = unlines ["module " ++ mod_name,
"where",
"f :: Int -> Int",
"f = id"]
mod_v2 = unlines ["module " ++ mod_name,
"where",
"f :: Int -> Int",
"f = (1 +)"]
--
get_f = do H.loadModules [mod_file]
H.setTopLevelModules [mod_name]
H.interpret "f" (H.as :: Int -> Int)
main :: IO ()
main = do s <- H.newSession
ok <- test_reload_modified s
if ok
then putStrLn "test ok"
else fail "test failed"
`catchDyn` printInterpreterError
printInterpreterError :: H.InterpreterError -> IO ()
printInterpreterError e = putStrLn $ "Ups... " ++ (show e)