mirror of
https://github.com/python/cpython.git
synced 2024-12-04 07:15:09 +08:00
45df820591
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 ........
191 lines
4.6 KiB
Python
191 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()
|