Doctests for your shell. Run an executable, check the output.
With pip
:
pip install doctest-cli
By hand:
curl -O https://github.com/ivan-krukov/doctest-cli/blob/master/bin/doctest-cli ~/bin
chmod +x ~/bin/doctest-cli
Create a test script, say test.sh
:
# Command
>>> echo hello
# Expected output
hello
# Another command
>>> echo 'Good bye!'
Good bye!
# Failing
>>> echo banana
apple
Test it:
doctest-cli test.sh
Check output:
doctest-cli: test/simple.sh
------------------------------------------------------------
Error while running:
echo banana
With STDERR:
Expected STDOUT:
apple
Got:
banana
------------------------------------------------------------
Tests ran: 3
Tests passed: 2
Tests failed: 1
The program depends on python
- both 2.7
and 3.4
and above should work
See test/
for more examples.
Check return code by adding $?=<RET>
to the beginning of the line. Default return code is 0
:
>>> false
$?=1
>>> true
$?=0
Check stderr
output by adding !
to the beginning of the line:
>>> echo error > /dev/stderr
! error
By default, the stderr
stream is assumed to be empty.
You can use a custom shell with a shebang line:
#!/usr/local/bin/fish
>>> echo hello; and echo this is fish
hello
this is fish
doctest-cli
uses python
's subprocess
module to spawn a new shell for each command and checks the output against the lines provided. All the environment variables are inherited from the parent session.
Whitespace (including intervening newlines) is ignored. For example, the following test should pass, since all the newlines in the middle are removed:
>>>printf 'hello\n\n\n\n\n\nworld'
hello
world
This is done so that you can have an arbitrary amount of whitespace delineating the test blocks.