| #!/usr/bin/env python | |
| """ | |
| Test script for the 'cmd' module | |
| Original by Michael Schneider | |
| """ | |
| import cmd | |
| import sys | |
| from test import test_support | |
| import re | |
| import unittest | |
| import StringIO | |
| 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 xrange(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 xrange(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" | |
| return | |
| def complete_command(self): | |
| print "complete command" | |
| return | |
| 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 | |
| class TestAlternateInput(unittest.TestCase): | |
| class simplecmd(cmd.Cmd): | |
| def do_print(self, args): | |
| print >>self.stdout, args | |
| def do_EOF(self, args): | |
| return True | |
| def test_file_with_missing_final_nl(self): | |
| input = StringIO.StringIO("print test\nprint test2") | |
| output = StringIO.StringIO() | |
| cmd = self.simplecmd(stdin=input, stdout=output) | |
| cmd.use_rawinput = False | |
| cmd.cmdloop() | |
| self.assertMultiLineEqual(output.getvalue(), | |
| ("(Cmd) test\n" | |
| "(Cmd) test2\n" | |
| "(Cmd) ")) | |
| def test_main(verbose=None): | |
| from test import test_cmd | |
| test_support.run_doctest(test_cmd, verbose) | |
| test_support.run_unittest(TestAlternateInput) | |
| def test_coverage(coverdir): | |
| trace = test_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() |