blob: 11602f16dfcd32dc410d318115b8ee539c1214af [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#!/usr/bin/env python3
Christian Heimesd8654cf2007-12-02 15:22:16 +00002"""
3Test script for the 'cmd' module
4Original by Michael Schneider
5"""
6
7
Christian Heimesd8654cf2007-12-02 15:22:16 +00008import cmd
9import sys
Christian Heimes2137b6a2007-12-02 16:50:20 +000010import trace
11import re
12from io import StringIO
Christian Heimesd8654cf2007-12-02 15:22:16 +000013
14class samplecmdclass(cmd.Cmd):
15 """
16 Instance the sampleclass:
17 >>> mycmd = samplecmdclass()
18
19 Test for the function parseline():
20 >>> mycmd.parseline("")
21 (None, None, '')
22 >>> mycmd.parseline("?")
23 ('help', '', 'help ')
24 >>> mycmd.parseline("?help")
25 ('help', 'help', 'help help')
26 >>> mycmd.parseline("!")
27 ('shell', '', 'shell ')
28 >>> mycmd.parseline("!command")
29 ('shell', 'command', 'shell command')
30 >>> mycmd.parseline("func")
31 ('func', '', 'func')
32 >>> mycmd.parseline("func arg1")
33 ('func', 'arg1', 'func arg1')
34
35
36 Test for the function onecmd():
37 >>> mycmd.onecmd("")
38 >>> mycmd.onecmd("add 4 5")
39 9
40 >>> mycmd.onecmd("")
41 9
42 >>> mycmd.onecmd("test")
43 *** Unknown syntax: test
44
45 Test for the function emptyline():
46 >>> mycmd.emptyline()
47 *** Unknown syntax: test
48
49 Test for the function default():
50 >>> mycmd.default("default")
51 *** Unknown syntax: default
52
53 Test for the function completedefault():
54 >>> mycmd.completedefault()
55 This is the completedefault methode
56 >>> mycmd.completenames("a")
57 ['add']
58
59 Test for the function completenames():
60 >>> mycmd.completenames("12")
61 []
62 >>> mycmd.completenames("help")
Benjamin Petersona28e7022010-01-09 18:53:06 +000063 ['help']
Christian Heimesd8654cf2007-12-02 15:22:16 +000064
65 Test for the function complete_help():
66 >>> mycmd.complete_help("a")
67 ['add']
68 >>> mycmd.complete_help("he")
Benjamin Petersona28e7022010-01-09 18:53:06 +000069 ['help']
Christian Heimesd8654cf2007-12-02 15:22:16 +000070 >>> mycmd.complete_help("12")
71 []
Benjamin Petersona28e7022010-01-09 18:53:06 +000072 >>> sorted(mycmd.complete_help(""))
73 ['add', 'exit', 'help', 'shell']
Christian Heimesd8654cf2007-12-02 15:22:16 +000074
75 Test for the function do_help():
76 >>> mycmd.do_help("testet")
77 *** No help on testet
78 >>> mycmd.do_help("add")
79 help text for add
80 >>> mycmd.onecmd("help add")
81 help text for add
82 >>> mycmd.do_help("")
83 <BLANKLINE>
84 Documented commands (type help <topic>):
85 ========================================
86 add
87 <BLANKLINE>
88 Undocumented commands:
89 ======================
90 exit help shell
91 <BLANKLINE>
92
93 Test for the function print_topics():
94 >>> mycmd.print_topics("header", ["command1", "command2"], 2 ,10)
95 header
96 ======
97 command1
98 command2
99 <BLANKLINE>
100
101 Test for the function columnize():
Christian Heimes2137b6a2007-12-02 16:50:20 +0000102 >>> mycmd.columnize([str(i) for i in range(20)])
Christian Heimesd8654cf2007-12-02 15:22:16 +0000103 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Christian Heimes2137b6a2007-12-02 16:50:20 +0000104 >>> mycmd.columnize([str(i) for i in range(20)], 10)
Christian Heimesd8654cf2007-12-02 15:22:16 +0000105 0 7 14
106 1 8 15
107 2 9 16
108 3 10 17
109 4 11 18
110 5 12 19
111 6 13
112
113 This is a interactive test, put some commands in the cmdqueue attribute
114 and let it execute
115 This test includes the preloop(), postloop(), default(), emptyline(),
116 parseline(), do_help() functions
117 >>> mycmd.use_rawinput=0
118 >>> mycmd.cmdqueue=["", "add", "add 4 5", "help", "help add","exit"]
119 >>> mycmd.cmdloop()
120 Hello from preloop
121 help text for add
122 *** invalid number of arguments
123 9
124 <BLANKLINE>
125 Documented commands (type help <topic>):
126 ========================================
127 add
128 <BLANKLINE>
129 Undocumented commands:
130 ======================
131 exit help shell
132 <BLANKLINE>
133 help text for add
134 Hello from postloop
135 """
136
137 def preloop(self):
Christian Heimes2137b6a2007-12-02 16:50:20 +0000138 print("Hello from preloop")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000139
140 def postloop(self):
Christian Heimes2137b6a2007-12-02 16:50:20 +0000141 print("Hello from postloop")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000142
143 def completedefault(self, *ignored):
Christian Heimes2137b6a2007-12-02 16:50:20 +0000144 print("This is the completedefault methode")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000145
146 def complete_command(self):
Christian Heimes2137b6a2007-12-02 16:50:20 +0000147 print("complete command")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000148
Benjamin Petersona28e7022010-01-09 18:53:06 +0000149 def do_shell(self, s):
Christian Heimesd8654cf2007-12-02 15:22:16 +0000150 pass
151
152 def do_add(self, s):
153 l = s.split()
154 if len(l) != 2:
Christian Heimes2137b6a2007-12-02 16:50:20 +0000155 print("*** invalid number of arguments")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000156 return
157 try:
158 l = [int(i) for i in l]
159 except ValueError:
Christian Heimes2137b6a2007-12-02 16:50:20 +0000160 print("*** arguments should be numbers")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000161 return
Christian Heimes2137b6a2007-12-02 16:50:20 +0000162 print(l[0]+l[1])
Christian Heimesd8654cf2007-12-02 15:22:16 +0000163
164 def help_add(self):
Christian Heimes2137b6a2007-12-02 16:50:20 +0000165 print("help text for add")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000166 return
167
168 def do_exit(self, arg):
169 return True
170
171def test_main(verbose=None):
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000172 from test import support, test_cmd
173 support.run_doctest(test_cmd, verbose)
Christian Heimesd8654cf2007-12-02 15:22:16 +0000174
Christian Heimesd8654cf2007-12-02 15:22:16 +0000175def test_coverage(coverdir):
Benjamin Petersona28e7022010-01-09 18:53:06 +0000176 import trace
Christian Heimesd8654cf2007-12-02 15:22:16 +0000177 tracer=trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,],
178 trace=0, count=1)
179 tracer.run('reload(cmd);test_main()')
180 r=tracer.results()
Christian Heimes2137b6a2007-12-02 16:50:20 +0000181 print("Writing coverage results...")
Christian Heimesd8654cf2007-12-02 15:22:16 +0000182 r.write_results(show_missing=True, summary=True, coverdir=coverdir)
183
184if __name__ == "__main__":
185 if "-c" in sys.argv:
186 test_coverage('/tmp/cmd.cover')
Benjamin Petersona28e7022010-01-09 18:53:06 +0000187 elif "-i" in sys.argv:
188 samplecmdclass().cmdloop()
Christian Heimesd8654cf2007-12-02 15:22:16 +0000189 else:
190 test_main()