mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	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 ........
		
			
				
	
	
		
			190 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/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()
 |