
    daf                        d Z ddlZddlZddlZddlZddlZddlmZ  G d dej                        Z	 G d dej                        Zd Zed	k(  r6d
ej                  v r e	       j                          y ej                           yy)z@
Test script for the 'cmd' module
Original by Michael Schneider
    N)supportc                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)samplecmdclassa  
    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 method
    >>> 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', 'life', 'meaning', '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.onecmd("help meaning")  # doctest: +NORMALIZE_WHITESPACE
    Try and be nice to people, avoid eating fat, read a good book every
    now and then, get some walking in, and try to live together in peace
    and harmony with people of all creeds and nations.
    >>> mycmd.do_help("")
    <BLANKLINE>
    Documented commands (type help <topic>):
    ========================================
    add  help
    <BLANKLINE>
    Miscellaneous help topics:
    ==========================
    life  meaning
    <BLANKLINE>
    Undocumented commands:
    ======================
    exit  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 an 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()  # doctest: +REPORT_NDIFF
    Hello from preloop
    *** invalid number of arguments
    9
    9
    <BLANKLINE>
    Documented commands (type help <topic>):
    ========================================
    add  help
    <BLANKLINE>
    Miscellaneous help topics:
    ==========================
    life  meaning
    <BLANKLINE>
    Undocumented commands:
    ======================
    exit  shell
    <BLANKLINE>
    help text for add
    Hello from postloop
    c                     t        d       y )NzHello from preloopprintselfs    (/root/Python-3.12.4/Lib/test/test_cmd.pypreloopzsamplecmdclass.preloop   s    "#    c                     t        d       y )NzHello from postloopr   r	   s    r   postloopzsamplecmdclass.postloop   s    #$r   c                     t        d       y )Nz"This is the completedefault methodr   )r
   ignoreds     r   completedefaultzsamplecmdclass.completedefault   s    23r   c                     t        d       y )Nzcomplete commandr   r	   s    r   complete_commandzsamplecmdclass.complete_command   s     !r   c                      y N )r
   ss     r   do_shellzsamplecmdclass.do_shell   s    r   c                     |j                         }t        |      dk7  rt        d       y 	 |D cg c]  }t        |       }}t        |d   |d   z          y c c}w # t        $ r t        d       Y y w xY w)N   z*** invalid number of argumentsz*** arguments should be numbersr      )splitlenr   int
ValueError)r
   r   lis       r   do_addzsamplecmdclass.do_add   sv    GGIq6Q;34	!"#AQ#A# 	ad1Q4i	 $ 	34	s"   A AA A A54A5c                     t        d       y )Nzhelp text for addr   r	   s    r   help_addzsamplecmdclass.help_add   s    !"r   c                     t        d       y )NzTry and be nice to people, avoid eating fat, read a good book every now and then, get some walking in, and try to live together in peace and harmony with people of all creeds and nations.r   r	   s    r   help_meaningzsamplecmdclass.help_meaning   s     2 	3 	r   c                     t        d       y )Nz&Always look on the bright side of lifer   r	   s    r   	help_lifezsamplecmdclass.help_life   s    67r   c                      yNTr   )r
   args     r   do_exitzsamplecmdclass.do_exit   s    r   N)__name__
__module____qualname____doc__r   r   r   r   r   r#   r%   r'   r)   r-   r   r   r   r   r      s;    EN$%4"
r   r   c                   X    e Zd Z G d dej                        Z G d de      Zd Zd Zy)TestAlternateInputc                       e Zd Zd Zd Zy)TestAlternateInput.simplecmdc                 2    t        || j                         y )Nfiler   stdoutr
   argss     r   do_printz%TestAlternateInput.simplecmd.do_print   s    $T[[)r   c                      yr+   r   r;   s     r   do_EOFz#TestAlternateInput.simplecmd.do_EOF   s    r   N)r.   r/   r0   r=   r?   r   r   r   	simplecmdr5      s    	*	r   r@   c                       e Zd Zd Zy)TestAlternateInput.simplecmd2c                 2    t        d| j                         y)Nz*** Unknown syntax: EOFr7   Tr9   r;   s     r   r?   z$TestAlternateInput.simplecmd2.do_EOF   s    +$++>r   N)r.   r/   r0   r?   r   r   r   
simplecmd2rB      s    	r   rD   c                     t        j                  d      }t        j                         }| j                  ||      }d|_         |j                          | j                  |j                         d       y )Nprint test
print test2stdinr:   Fz(Cmd) test
(Cmd) test2
(Cmd) )ioStringIOr@   use_rawinputcmdloopassertMultiLineEqualgetvaluer
   inputoutputcmds       r   test_file_with_missing_final_nlz2TestAlternateInput.test_file_with_missing_final_nl   s]    56nn5n8 !!&//"3	r   c                    t        j                  d      }t        j                         }| j                  ||      }d|_         |j                          | j                  |j                         d       t        j                  d      }t        j                         }||_        ||_         |j                          | j                  |j                         d       y )NrF   rG   Fz5(Cmd) test
(Cmd) test2
(Cmd) *** Unknown syntax: EOF
zprint 

z,(Cmd) 
(Cmd) 
(Cmd) *** Unknown syntax: EOF
)	rI   rJ   rD   rK   rL   rM   rN   rH   r:   rO   s       r   test_input_reset_at_EOFz*TestAlternateInput.test_input_reset_at_EOF   s    56ooE&o9 !!&//"3/	1 L)	
!!&//"3/	1r   N)	r.   r/   r0   rR   Cmdr@   rD   rS   rU   r   r   r   r3   r3      s(    CGG Y 	1r   r3   c                 L    |j                  t        j                                |S r   )addTestdoctestDocTestSuite)loadertestspatterns      r   
load_testsr^      s    	MM'&&()Lr   __main__z-i)r1   rR   sysrY   unittestrI   testr   rV   r   TestCaser3   r^   r.   argvrL   mainr   r   r   <module>rf      s~     
   	 sSWW sl01** 01f
 zsxx  "	 r   