shelldoctest is Doctest/UnitTest for shell (mirror of Google Code project)
Python Shell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
shelldoctest
test
.hgignore
CHANGES
LICENSE
MANIFEST
Makefile
README
setup.py
shell-doctest
test.py

README

========
Overview
========

shelldoctest is Doctest/UnitTest for shell.


Doctest for shell
=================

Usage
-----

test.py::

    #!/usr/bin/env python
    """
    $ echo TEST
    TEST
    $ LANG=C date -u -r 0
    Thu Jan  1 00:00:00 UTC 1970
    """

    if __name__ == "__main__":
        import shelldoctest
        shelldoctest.testmod()

Shell Doctest Syntax
--------------------

Basic::

    $ <COMMAND>
    <RESPONSE>

Multi Lines::

    $ <COMMAND>
    . <COMMAND>
    <RESPONSE>
    <RESPONSE>

with Label::

    [<LABEL>]
    $ <COMMAND>
    <RESPONSE>

Run on Remote Host::

    @<HOSTNAME>
    $ <COMMAND>
    <RESPONSE>

    [<LABEL>]
    @<HOSTNAME>
    $ <COMMAND>
    <RESPONSE>

Run by User::

    <USERNAME>@<HOSTNAME>
    $ <COMMAND>
    <RESPONSE>

    [<LABEL>]
    <USERNAME>@<HOSTNAME>
    $ <COMMAND>
    <RESPONSE>

Checking STDERR::

    $ <COMMAND>
    (<RETURNCODE>)<STDERR-RESPONSE>
    <STDOUT-RESPONSE>

Management Tool
---------------

`shell-doctest` command::

    $ shell-doctest test <PATH-TO-MODULE> ...

    $ shell-doctest test <LABEL> ...

    $ shell-doctest test <PATH-TO-MODULE> ... <LABEL> ...

Examples
~~~~~~~~

test.py::

    """
    $ echo TEST
    TEST

    [#1]
    $ echo TEST1
    TEST1

    [#2]
    $ echo TEST2
    TEST2
    """

Run TEST::

    $ shell-doctest test ./test.py

    $ shell-doctest --verbose=2 test ./test.py
    Module:test.py
    Label:None
    Label:#1
    Label:#2

    $ shell-doctest --verbose=2 test ./test.py #2 #1
    Module:test.py
    Label:#2
    Label:#1

    $ shell-doctest --verbose=3 test ./test.py #2
    New verbose level is 3
    Module:manage.py
    Label:#2
    Trying:
        echo TEST2
    Expecting:
        TEST2
    ok
    1 items passed all tests:
       1 tests in manage
    1 tests in 3 items.
    1 passed and 0 failed.
    Test passed.


UnitTest
========

::

    from doctest import ELLIPSIS

    from shelldoctest.shellunittest import Connection, TestCase

    host = "localhost:22"

    class MyTest(TestCase):
        c1 = Connection(host)
        c2 = Connection(host)

        def test(self):
            self.assertOutput(self.c1, "pwd", "/.../...\n", ELLIPSIS)
            self.c1("cd /", None)
            self.assertOutput(self.c2, "pwd", "/.../...\n", ELLIPSIS)
            self.assertOutput(self.c1, "pwd", "/\n")