rsttst makes your reStructuredText documentation testable.
In fact, this README file is testable and is used to test rsttst.
If your tests document how your system works, why not formally combine your tests and documentation into one?
Below is an example:
2 + 2 = 4
The title “2 + 2 = 4” becomes the test name after being converted to a Python friendly identifier (ie. 2_plus_2_equals_4).
The bash code in the below code block will be run…
echo '2 + 2' | bc
…and the resulting stdout will be compared to the following code block:
4
The test fails if stdout doesn’t match the block above.
Dotted notation
Sometimes you want to be flexible with the output you accept.
You can use “.” and the “:class: dotted” rst directive option to support this.
echo Date: $(date)
echo '\ok'
The below code block uses the “:class: dotted” option.
Date: ............................
\ok
Three dots match in a similiar way to what you’d expect for a regex pattern of “.+” to work:
echo '<NZ>'
echo $(date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S")
The below code block uses the “:class: dotted” option.
<...>
DATE: ... TIME: ...
Generating tests
Under the hood rsttst generates Python code which is executable with py.test. Here’s how we generate the Python test code:
rsttst README.rst
cat test_readme.py | head -n 28
The resulting test code looks like the following:
# -*- coding: utf-8 -*-
from rsttst.core import run, Dotted
def test_2_plus_2_equals_4():
output = run(u"""echo '2 + 2' | bc""")
assert output == u"""4"""
def test_dotted_notation():
output = run(u"""echo Date: $(date)
echo '\\ok'""")
expected = Dotted(u"""Date: ............................
\\ok""")
cmp(output, expected)
expected = u"{0}".format(expected)
assert output == expected
def test_dotted_notation__2():
output = run(u"""echo '<NZ>'
echo $(date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S")""")
expected = Dotted(u"""<...>
DATE: ... TIME: ...""")
cmp(output, expected)
expected = u"{0}".format(expected)
assert output == expected
def test_generating_tests():
output = run(u"""rsttst README.rst
cat test_readme.py | head -n 28""")
Windows new lines
^M characters are automatically removed.
printf 'supports\012\015windows new lines'
supports
windows new lines
Ignore code-blocks
Sometimes you want to use a code-block without it being tested by rsttst.
You can use the “:class: ignore” directive to ignore this code-block:
.. code-block:: bash
:class: ignore
Running the tests
You could probably use another test runner, but pytest works quite well:
py.test -k 'not test_running_the_tests' | grep -v seconds
Note: we had to exclude ‘test_running_the_tests’, otherwise it’s turtles all the way down.
============================= test session starts ==============================
platform ...
collected 6 items
test_readme.py .....
============= 1 tests deselected by '-knot test_running_the_tests' =============
Functionality
Right now rsttst only supports bash testing.
FAQ
Why does pytest throw an “IndexError: list index out of range” exception for my JSON tests?
Please upgrade to the latest version of pytest
Metadata
Release files for rsttst 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rsttst-0.3.0.tar.gz | 7.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rsttst-0.3.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 18.7 kB
Release files / rsttst-0.3.0.tar.gz
| Download URL | rsttst-0.3.0.tar.gz |
|---|---|
| Size | 7.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d4acb2a4999bf9ed0b6f32dab3c24c2b8ac9750a9632d9eef477fbfb5bb1f94a
|
|
BLAKE2b-256 checksum How to use checksums |
b5d9fed43b27554822d8dd227f290707ae06eabf223a79522a27a1e1469994f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / rsttst-0.3.0-py2.py3-none-any.whl
| Download URL | rsttst-0.3.0-py2.py3-none-any.whl |
|---|---|
| Size | 11.1 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
2f09053580d2a8362646c81830bd9066f81b19ae23ae8c3b62fc3ffab84e61ee
|
|
BLAKE2b-256 checksum How to use checksums |
a9e3b24da4071897d9bf9a3fec1cdfba0da2b0d85d8c66b932c542d71b97890e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for rsttst 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.