3 \8)�@shddlZddlZddlZddlmZmZddlmZdZdZ dZ dd �Z d d �Z Gd d �d e �ZeZdS)�N�)�loader�runner)�installHandlerTaExamples: %(prog)s test_module - run tests from test_module %(prog)s module.TestClass - run tests from module.TestClass %(prog)s module.Class.test_method - run specified test method %(prog)s path/to/test_file.py - run tests from test_file.py aFExamples: %(prog)s - run default set of tests %(prog)s MyTestSuite - run suite 'MyTestSuite' %(prog)s MyTestCase.testSomething - run MyTestCase.testSomething %(prog)s MyTestCase - run all 'test*' test methods in MyTestCase cCsxtjj|�rt|j�jd�rttjj|�rXtjj|tj��}tjj|�sP|jtj �rT|S|}|dd�j dd�j dd�S|S)Nz.py��\�.�/�����) �os�path�isfile�lower�endswith�isabs�relpath�getcwd� startswith�pardir�replace)�nameZrel_path�r�%/usr/lib64/python3.6/unittest/main.py� _convert_names rcCsdd�|D�S)NcSsg|] }t|��qSr)r)�.0rrrr� .sz"_convert_names..r)�namesrrr�_convert_names-src @s�eZdZdZdZdZZZZZ dZ dddde j ddddddf dd�dd�Z dd d �Zd d �Zd d�Zdd�Zdd�Zdd�Zdd�Zdd�Zddd�Zdd�ZdS)� TestProgramNr�__main__TF)� tb_localsc Cs�t|t�r@t|�|_x0|jd�dd�D]} t|j| �|_q(Wn||_|dkrTtj}||_||_ | |_ ||_ | |_ | |_ | dkr�tj r�d|_n| |_||_||_||_tjj|d�|_|j|�|j�dS)Nrr�defaultr)� isinstance�str� __import__�module�split�getattr�sys�argv�exit�failfast� catchbreak� verbosity�bufferr � warnoptions�warnings� defaultTest� testRunner� testLoaderr r �basename�progName� parseArgs�runTests)�selfr%r1r)r2r3r*r-r+r,r.r0r �partrrr�__init__;s,   zTestProgram.__init__cCs4|r t|�|jdkr|j�|j�tjd�dS)N�)�print�_discovery_parser�_initArgParsers� _print_helpr(r*)r8�msgrrr� usageExitas  zTestProgram.usageExitcOsZ|jdkr6t|jj��ttd|ji�|jj�n t|jj��ttd|ji�dS)N�prog) r%r<�� _main_parserZ format_help� MAIN_EXAMPLESr5r=� print_help�MODULE_EXAMPLES)r8�args�kwargsrrrr?is   zTestProgram._print_helpcCs�|j�|jdkrpt|�dkrD|dj�dkrD|j|dd��dS|jj|dd�|�|js�|jg�dSn|jj|dd�|�|jr�t|j�|_ t dkr�d|_n6|j dkr�d|_ n$t |j t �r�|j f|_ n t|j �|_ |j�dS)Nr�discoverr;r)r>r%�lenr� _do_discoveryrC� parse_args�testsr� testNames�__name__r1r"r#�list� createTests)r8r)rrrr6rs(       zTestProgram.parseArgscCs4|jdkr|jj|j�|_n|jj|j|j�|_dS)N)rNr3ZloadTestsFromModuler%�testZloadTestsFromNames)r8rrrrQ�s  zTestProgram.createTestscCs$|j�}|j|�|_|j|�|_dS)N)�_getParentArgParser�_getMainArgParserrC�_getDiscoveryArgParserr=)r8Z parent_parserrrrr>�s zTestProgram._initArgParserscCs�tjdd�}|jddddddd �|jd d ddd d d �|jddddd�|jdkrn|jdddddd�d|_|jdkr�|jdddddd�d|_|jdkr�|jdddddd�d|_|S)NF)Zadd_helpz-vz --verboser-Z store_constr;zVerbose output)�dest�actionZconst�helpz-qz--quietrz Quiet outputz--localsr � store_truez"Show local variables in tracebacks)rVrWrXz-fz --failfastr+zStop on first fail or errorz-cz--catchr,z'Catch Ctrl-C and display results so farz-bz--bufferr.z%Buffer stdout and stderr during tests)�argparse�ArgumentParser� add_argumentr+r,r.)r8�parserrrrrS�s4         zTestProgram._getParentArgParsercCs2tj|gd�}|j|_|j|_|jdddd�|S)N)�parentsrM�*z?a list of any number of test modules, classes and test methods.)�nargsrX)rZr[r5rBr?rEr\)r8�parentr]rrrrT�s zTestProgram._getMainArgParsercCs~tj|gd�}d|j|_d|_|jddddd�|jd d d d d�|jd dddd�x"dD]}|j|dtjtjd�q\W|S)N)r^z %s discoverzcFor test discovery all test modules must be importable from the top level directory of the project.z-sz--start-directory�startz*Directory to start discovery ('.' default))rVrXz-pz --pattern�patternz+Pattern to match tests ('test*.py' default)z-tz--top-level-directory�topzrLr3rIrR)r8r)�LoaderrrrrrK�s zTestProgram._do_discoverycCs�|jr t�|jdkrtj|_t|jt�r�yVy"|j|j|j|j |j |j d�}Wn.t k r||j|j|j|j |j d�}YnXWq�t k r�|j�}Yq�Xn|j}|j |j�|_|jr�tj|jj� �dS)N)r-r+r.r0r )r-r+r.r0)r,rr2rZTextTestRunnerr"�typer-r+r.r0r � TypeErrorZrunrR�resultr*r(Z wasSuccessful)r8r2rrrr7�s.  zTestProgram.runTests)N)N)rO� __module__� __qualname__r%r-r+r,r.r5r0r=rZdefaultTestLoaderr:rAr?r6rQr>rSrTrUrKr7rrrrr1s$#    r)r(rZr �rrZsignalsrZ __unittestrDrFrr�objectr�mainrrrr�s  T