• Victor Stinner's avatar
    Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from · 45df8205
    Victor Stinner yazdı
    svn+ssh://pythondev@svn.python.org/python/trunk
    
    ........
      r80552 | victor.stinner | 2010-04-27 23:46:03 +0200 (mar., 27 avril 2010) | 3 lines
    
      Issue #7449, part 1: fix test_support.py for Python compiled without thread
    ........
      r80553 | victor.stinner | 2010-04-27 23:47:01 +0200 (mar., 27 avril 2010) | 1 line
    
      Issue #7449, part 2: regrtest.py -j option requires thread support
    ........
      r80554 | victor.stinner | 2010-04-27 23:51:26 +0200 (mar., 27 avril 2010) | 9 lines
    
      Issue #7449 part 3, test_doctest: import trace module in test_coverage()
    
      Import trace module fail if the threading module is missing. test_coverage() is
      only used if test_doctest.py is used with the -c option. This commit allows to
      execute the test suite without thread support.
    
      Move "import trace" in test_coverage() and use
      test_support.import_module('trace').
    ........
      r80555 | victor.stinner | 2010-04-27 23:56:26 +0200 (mar., 27 avril 2010) | 6 lines
    
      Issue #7449, part 4: skip test_multiprocessing if thread support is disabled
    
      import threading after _multiprocessing to raise a more revelant error message:
      "No module named _multiprocessing". _multiprocessing is not compiled without
      thread support.
    ........
      r80556 | victor.stinner | 2010-04-28 00:01:24 +0200 (mer., 28 avril 2010) | 8 lines
    
      Issue #7449, part 5: split Test.test_open() of ctypes/test/test_errno.py
    
       * Split Test.test_open() in 2 functions: test_open() and test_thread_open()
       * Skip test_open() and test_thread_open() if we are unable to find the C
         library
       * Skip test_thread_open() if thread support is disabled
       * Use unittest.skipUnless(os.name == "nt", ...) on test_GetLastError()
    ........
      r80564 | victor.stinner | 2010-04-28 00:59:35 +0200 (mer., 28 avril 2010) | 4 lines
    
      Issue #7449, part 6: fix test_hashlib for missing threading module
    
      Move @test_support.reap_thread decorator from test_main() to test_threaded_hashing().
    ........
      r80565 | victor.stinner | 2010-04-28 01:01:29 +0200 (mer., 28 avril 2010) | 6 lines
    
      Issue #7449, part 7: simplify threading detection in test_capi
    
       * Skip TestPendingCalls if threading module is missing
       * Test if threading module is present or not, instead of test the presence of
         _testcapi._test_thread_state
    ........
      r80566 | victor.stinner | 2010-04-28 01:03:16 +0200 (mer., 28 avril 2010) | 4 lines
    
      Issue #7449, part 8: don't skip the whole test_asynchat if threading is missing
    
      TestFifo can be executed without the threading module
    ........
      r80568 | victor.stinner | 2010-04-28 01:14:58 +0200 (mer., 28 avril 2010) | 6 lines
    
      Issue #7449, part 9: fix test_xmlrpclib for missing threading module
    
       * Skip testcases using threads if threading module is missing
       * Use "http://" instead of URL in ServerProxyTestCase if threading is missing
         because URL is not set in this case
    ........
      r80569 | victor.stinner | 2010-04-28 01:33:58 +0200 (mer., 28 avril 2010) | 6 lines
    
      Partial revert of r80556 (Issue #7449, part 5, fix ctypes test)
    
      Rewrite r80556: the thread test have to be executed just after the test on
      libc_open() and so the test cannot be splitted in two functions (without
      duplicating code, and I don't want to duplicate code).
    ........
      r80570 | victor.stinner | 2010-04-28 01:51:16 +0200 (mer., 28 avril 2010) | 8 lines
    
      Issue #7449, part 10: test_cmd imports trace module using test_support.import_module()
    
      Use test_support.import_module() instead of import to raise a SkipTest
      exception if the import fail. Import trace fails if the threading module is
      missing.
    
      See also part 3: test_doctest: import trace module in test_coverage().
    ........
      r80571 | victor.stinner | 2010-04-28 01:55:59 +0200 (mer., 28 avril 2010) | 6 lines
    
      Issue #7449, last part (11): fix many tests if thread support is disabled
    
       * Use try/except ImportError or test_support.import_module() to import thread
         and threading modules
       * Add @unittest.skipUnless(threading, ...) to testcases using threads
    ........
    45df8205
test_cmd.py 4.64 KB
#!/usr/bin/env python3
"""
Test script for the 'cmd' module
Original by Michael Schneider
"""


import cmd
import sys
import re
from io import StringIO
from test import support

class samplecmdclass(cmd.Cmd):
    """
    Instance the sampleclass:
    >>> mycmd = samplecmdclass()

    Test for the function parseline():
    >>> mycmd.parseline("")
    (None, None, '')
    >>> mycmd.parseline("?")
    ('help', '', 'help ')
    >>> mycmd.parseline("?help")
    ('help', 'help', 'help help')
    >>> mycmd.parseline("!")
    ('shell', '', 'shell ')
    >>> mycmd.parseline("!command")
    ('shell', 'command', 'shell command')
    >>> mycmd.parseline("func")
    ('func', '', 'func')
    >>> mycmd.parseline("func arg1")
    ('func', 'arg1', 'func arg1')


    Test for the function onecmd():
    >>> mycmd.onecmd("")
    >>> mycmd.onecmd("add 4 5")
    9
    >>> mycmd.onecmd("")
    9
    >>> mycmd.onecmd("test")
    *** Unknown syntax: test

    Test for the function emptyline():
    >>> mycmd.emptyline()
    *** Unknown syntax: test

    Test for the function default():
    >>> mycmd.default("default")
    *** Unknown syntax: default

    Test for the function completedefault():
    >>> mycmd.completedefault()
    This is the completedefault methode
    >>> mycmd.completenames("a")
    ['add']

    Test for the function completenames():
    >>> mycmd.completenames("12")
    []
    >>> mycmd.completenames("help")
    ['help']

    Test for the function complete_help():
    >>> mycmd.complete_help("a")
    ['add']
    >>> mycmd.complete_help("he")
    ['help']
    >>> mycmd.complete_help("12")
    []
    >>> sorted(mycmd.complete_help(""))
    ['add', 'exit', 'help', 'shell']

    Test for the function do_help():
    >>> mycmd.do_help("testet")
    *** No help on testet
    >>> mycmd.do_help("add")
    help text for add
    >>> mycmd.onecmd("help add")
    help text for add
    >>> mycmd.do_help("")
    <BLANKLINE>
    Documented commands (type help <topic>):
    ========================================
    add
    <BLANKLINE>
    Undocumented commands:
    ======================
    exit  help  shell
    <BLANKLINE>

    Test for the function print_topics():
    >>> mycmd.print_topics("header", ["command1", "command2"], 2 ,10)
    header
    ======
    command1
    command2
    <BLANKLINE>

    Test for the function columnize():
    >>> mycmd.columnize([str(i) for i in range(20)])
    0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19
    >>> mycmd.columnize([str(i) for i in range(20)], 10)
    0  7   14
    1  8   15
    2  9   16
    3  10  17
    4  11  18
    5  12  19
    6  13

    This is a interactive test, put some commands in the cmdqueue attribute
    and let it execute
    This test includes the preloop(), postloop(), default(), emptyline(),
    parseline(), do_help() functions
    >>> mycmd.use_rawinput=0
    >>> mycmd.cmdqueue=["", "add", "add 4 5", "help", "help add","exit"]
    >>> mycmd.cmdloop()
    Hello from preloop
    help text for add
    *** invalid number of arguments
    9
    <BLANKLINE>
    Documented commands (type help <topic>):
    ========================================
    add
    <BLANKLINE>
    Undocumented commands:
    ======================
    exit  help  shell
    <BLANKLINE>
    help text for add
    Hello from postloop
    """

    def preloop(self):
        print("Hello from preloop")

    def postloop(self):
        print("Hello from postloop")

    def completedefault(self, *ignored):
        print("This is the completedefault methode")

    def complete_command(self):
        print("complete command")

    def do_shell(self, s):
        pass

    def do_add(self, s):
        l = s.split()
        if len(l) != 2:
            print("*** invalid number of arguments")
            return
        try:
            l = [int(i) for i in l]
        except ValueError:
            print("*** arguments should be numbers")
            return
        print(l[0]+l[1])

    def help_add(self):
        print("help text for add")
        return

    def do_exit(self, arg):
        return True

def test_main(verbose=None):
    from test import test_cmd
    support.run_doctest(test_cmd, verbose)

def test_coverage(coverdir):
    trace = support.import_module('trace')
    tracer=trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,],
                        trace=0, count=1)
    tracer.run('reload(cmd);test_main()')
    r=tracer.results()
    print("Writing coverage results...")
    r.write_results(show_missing=True, summary=True, coverdir=coverdir)

if __name__ == "__main__":
    if "-c" in sys.argv:
        test_coverage('/tmp/cmd.cover')
    elif "-i" in sys.argv:
        samplecmdclass().cmdloop()
    else:
        test_main()