tools: rename tools/doctest -> tools/docshelltest, update
This commit is contained in:
parent
c881d916eb
commit
93e76047d7
@ -1,43 +1,44 @@
|
||||
#!/usr/bin/env runhaskell
|
||||
#!/usr/bin/env stack
|
||||
{- stack script --resolver nightly-2021-07-16 --compile
|
||||
-}
|
||||
-- add this to see packages being installed instead of a long silence:
|
||||
-- --verbosity=info
|
||||
--package base-prelude
|
||||
--package directory
|
||||
--package extra
|
||||
--package process
|
||||
--package regex
|
||||
--package safe
|
||||
--package shake
|
||||
--package time
|
||||
|
||||
{- |
|
||||
Extract (shell) tests from haddock comments in Haskell code, run them and
|
||||
verify expected output, like Python's doctest system.
|
||||
verify expected output. Like https://hackage.haskell.org/package/doctest,
|
||||
but tests shell commands instead of GHCI commands.
|
||||
|
||||
Here, a doctest is a haddock literal block whose first line begins with a
|
||||
$ (leading whitespace ignored). The rest of the line is a shell command
|
||||
and the remaining lines are the expected output.
|
||||
A docshelltest is a haddock literal block whose first line begins with a
|
||||
$ (leading whitespace ignored), the rest of the line is a shell command
|
||||
and the remaining lines are the expected output. The exit code is expected
|
||||
to be zero.
|
||||
|
||||
Usage example: $ doctest.hs doctest.hs
|
||||
|
||||
Doctest examples:
|
||||
|
||||
@
|
||||
$ ls doctest.hs
|
||||
This doctest will fail.
|
||||
$ echo This test shall pass
|
||||
This test shall pass
|
||||
@
|
||||
|
||||
@
|
||||
$ ls doctest.hs
|
||||
doctest.hs
|
||||
$ echo This test shall fail
|
||||
|
||||
@
|
||||
|
||||
Issues:
|
||||
|
||||
After writing this I found the doctest on hackage; that one runs haskell
|
||||
expressions in comments, converting them to hunit tests. We might add this
|
||||
to that, and/or add this to hledger's built-in test runner.
|
||||
|
||||
Error output seems to vary depending on whether things are compiled, eg:
|
||||
hledger: parse error at (line 1, column 4)
|
||||
vs:
|
||||
"-" (line 2, column 1)
|
||||
ledger-style functional tests may be more useful for this, see functest.hs.
|
||||
|
||||
-}
|
||||
|
||||
module Main where
|
||||
import Data.List (isPrefixOf)
|
||||
import System (getArgs)
|
||||
import System.Environment (getArgs)
|
||||
import System.Exit (exitFailure, exitWith, ExitCode(ExitSuccess)) -- base 3 compatible
|
||||
import System.IO (hGetContents, hPutStr, hPutStrLn, stderr)
|
||||
import System.Process (runInteractiveCommand, waitForProcess)
|
||||
@ -49,6 +50,7 @@ main = do
|
||||
let tests = doctests s
|
||||
putStrLn $ printf "Running %d doctests from %s" (length tests) f
|
||||
ok <- mapM runShellDocTest $ doctests s
|
||||
putStrLn ""
|
||||
if any not ok then exitFailure else exitWith ExitSuccess
|
||||
|
||||
runShellDocTest :: String -> IO Bool
|
||||
Loading…
Reference in New Issue
Block a user