module DocTest (
getDocTests
, DocTest(..)
, Interaction(..)
, toTestCase
, toAssertion
) where
import Test.HUnit (Test(..), assertEqual, Assertion)
import qualified Interpreter
import Parse
toTestCase :: Interpreter.Interpreter -> DocTest -> Test
toTestCase repl test = TestLabel sourceFile $ TestCase $ toAssertion repl test
where
sourceFile = moduleName test
toAssertion :: Interpreter.Interpreter -> DocTest -> Assertion
toAssertion repl test = do
_ <- Interpreter.eval repl $ ":reload"
_ <- Interpreter.eval repl $ ":m *" ++ moduleName test
mapM_ interactionToAssertion $ interactions test
where
interactionToAssertion x = do
result' <- Interpreter.eval repl exampleExpression
assertEqual ("expression `" ++ exampleExpression ++ "'")
exampleResult $ lines result'
where
exampleExpression = expression x
exampleResult = map subBlankLines $ result x
subBlankLines "<BLANKLINE>" = ""
subBlankLines line = line