python (3.11.7)

(root)/
lib/
python3.11/
test/
test_cmd.py
       1  """
       2  Test script for the 'cmd' module
       3  Original by Michael Schneider
       4  """
       5  
       6  
       7  import cmd
       8  import sys
       9  import doctest
      10  import unittest
      11  import io
      12  from test import support
      13  
      14  class ESC[4;38;5;81msamplecmdclass(ESC[4;38;5;149mcmdESC[4;38;5;149m.ESC[4;38;5;149mCmd):
      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 method
      56      >>> mycmd.completenames("a")
      57      ['add']
      58  
      59      Test for the function completenames():
      60      >>> mycmd.completenames("12")
      61      []
      62      >>> mycmd.completenames("help")
      63      ['help']
      64  
      65      Test for the function complete_help():
      66      >>> mycmd.complete_help("a")
      67      ['add']
      68      >>> mycmd.complete_help("he")
      69      ['help']
      70      >>> mycmd.complete_help("12")
      71      []
      72      >>> sorted(mycmd.complete_help(""))
      73      ['add', 'exit', 'help', 'life', 'meaning', 'shell']
      74  
      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.onecmd("help meaning")  # doctest: +NORMALIZE_WHITESPACE
      83      Try and be nice to people, avoid eating fat, read a good book every
      84      now and then, get some walking in, and try to live together in peace
      85      and harmony with people of all creeds and nations.
      86      >>> mycmd.do_help("")
      87      <BLANKLINE>
      88      Documented commands (type help <topic>):
      89      ========================================
      90      add  help
      91      <BLANKLINE>
      92      Miscellaneous help topics:
      93      ==========================
      94      life  meaning
      95      <BLANKLINE>
      96      Undocumented commands:
      97      ======================
      98      exit  shell
      99      <BLANKLINE>
     100  
     101      Test for the function print_topics():
     102      >>> mycmd.print_topics("header", ["command1", "command2"], 2 ,10)
     103      header
     104      ======
     105      command1
     106      command2
     107      <BLANKLINE>
     108  
     109      Test for the function columnize():
     110      >>> mycmd.columnize([str(i) for i in range(20)])
     111      0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19
     112      >>> mycmd.columnize([str(i) for i in range(20)], 10)
     113      0  7   14
     114      1  8   15
     115      2  9   16
     116      3  10  17
     117      4  11  18
     118      5  12  19
     119      6  13
     120  
     121      This is an interactive test, put some commands in the cmdqueue attribute
     122      and let it execute
     123      This test includes the preloop(), postloop(), default(), emptyline(),
     124      parseline(), do_help() functions
     125      >>> mycmd.use_rawinput=0
     126  
     127      >>> mycmd.cmdqueue=["add", "add 4 5", "", "help", "help add", "exit"]
     128      >>> mycmd.cmdloop()  # doctest: +REPORT_NDIFF
     129      Hello from preloop
     130      *** invalid number of arguments
     131      9
     132      9
     133      <BLANKLINE>
     134      Documented commands (type help <topic>):
     135      ========================================
     136      add  help
     137      <BLANKLINE>
     138      Miscellaneous help topics:
     139      ==========================
     140      life  meaning
     141      <BLANKLINE>
     142      Undocumented commands:
     143      ======================
     144      exit  shell
     145      <BLANKLINE>
     146      help text for add
     147      Hello from postloop
     148      """
     149  
     150      def preloop(self):
     151          print("Hello from preloop")
     152  
     153      def postloop(self):
     154          print("Hello from postloop")
     155  
     156      def completedefault(self, *ignored):
     157          print("This is the completedefault method")
     158  
     159      def complete_command(self):
     160          print("complete command")
     161  
     162      def do_shell(self, s):
     163          pass
     164  
     165      def do_add(self, s):
     166          l = s.split()
     167          if len(l) != 2:
     168              print("*** invalid number of arguments")
     169              return
     170          try:
     171              l = [int(i) for i in l]
     172          except ValueError:
     173              print("*** arguments should be numbers")
     174              return
     175          print(l[0]+l[1])
     176  
     177      def help_add(self):
     178          print("help text for add")
     179          return
     180  
     181      def help_meaning(self):
     182          print("Try and be nice to people, avoid eating fat, read a "
     183                "good book every now and then, get some walking in, "
     184                "and try to live together in peace and harmony with "
     185                "people of all creeds and nations.")
     186          return
     187  
     188      def help_life(self):
     189          print("Always look on the bright side of life")
     190          return
     191  
     192      def do_exit(self, arg):
     193          return True
     194  
     195  
     196  class ESC[4;38;5;81mTestAlternateInput(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     197  
     198      class ESC[4;38;5;81msimplecmd(ESC[4;38;5;149mcmdESC[4;38;5;149m.ESC[4;38;5;149mCmd):
     199  
     200          def do_print(self, args):
     201              print(args, file=self.stdout)
     202  
     203          def do_EOF(self, args):
     204              return True
     205  
     206  
     207      class ESC[4;38;5;81msimplecmd2(ESC[4;38;5;149msimplecmd):
     208  
     209          def do_EOF(self, args):
     210              print('*** Unknown syntax: EOF', file=self.stdout)
     211              return True
     212  
     213  
     214      def test_file_with_missing_final_nl(self):
     215          input = io.StringIO("print test\nprint test2")
     216          output = io.StringIO()
     217          cmd = self.simplecmd(stdin=input, stdout=output)
     218          cmd.use_rawinput = False
     219          cmd.cmdloop()
     220          self.assertMultiLineEqual(output.getvalue(),
     221              ("(Cmd) test\n"
     222               "(Cmd) test2\n"
     223               "(Cmd) "))
     224  
     225  
     226      def test_input_reset_at_EOF(self):
     227          input = io.StringIO("print test\nprint test2")
     228          output = io.StringIO()
     229          cmd = self.simplecmd2(stdin=input, stdout=output)
     230          cmd.use_rawinput = False
     231          cmd.cmdloop()
     232          self.assertMultiLineEqual(output.getvalue(),
     233              ("(Cmd) test\n"
     234               "(Cmd) test2\n"
     235               "(Cmd) *** Unknown syntax: EOF\n"))
     236          input = io.StringIO("print \n\n")
     237          output = io.StringIO()
     238          cmd.stdin = input
     239          cmd.stdout = output
     240          cmd.cmdloop()
     241          self.assertMultiLineEqual(output.getvalue(),
     242              ("(Cmd) \n"
     243               "(Cmd) \n"
     244               "(Cmd) *** Unknown syntax: EOF\n"))
     245  
     246  
     247  def load_tests(loader, tests, pattern):
     248      tests.addTest(doctest.DocTestSuite())
     249      return tests
     250  
     251  
     252  if __name__ == "__main__":
     253      if "-i" in sys.argv:
     254          samplecmdclass().cmdloop()
     255      else:
     256          unittest.main()