
    ih                        d dl Z d dl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 d dl	m
Z
 d dlmZ d dlmZ d dlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ 	  e d       dZ# e       dz
  Z$ e%ejL                  jO                  d      xs	  e(e$d            Z)e)dkD  rdZ)erdZ#de#iZ*eresdndZ)d Z+d Z, G d d e-      Z. G d! d"e/      Z0 G d# d$e-      Z1 G d% d&e-      Z2 G d' d(e-      Z3d) Z4d2d*Z5d+ Z6d3d,Z7	 	 d4d-Z8d. Z9d5d/Z:d0 Z;e<d1k(  r e;        yy# e!e"f$ r Y w xY w)6    N)contextmanager)	timedelta)
ThreadPool)	cpu_count)Lazy   )util)parse_resources)setup_resources)unparse_resources)RUNNING_ON_CI)PYPY)PY2)RESOLVER_ARES)RUN_LEAKCHECKS)OSX)six)travis	_testcapid   NWORKERS      
      timeout   c                     t         j                  j                  |       s-|r+t        |      }t         j                  j	                  ||       S | S N)ospathisfile_dir_from_package_namejoin)filenamepackagepackage_dirs      W/var/www/html/dev/engine/venv/lib/python3.12/site-packages/gevent/testing/testrunner.py_package_relative_filenamer)   >   s8    77>>(#,W5ww||K22O    c                     t        j                  |       }t        j                  j	                  |j
                        }|S r   )	importlibimport_moduler    r!   dirname__file__)r&   package_modr'   s      r(   r#   r#   E   s0    ))'2K''//+"6"67Kr*   c                   .    e Zd Zd Zd Zd Zed        Zy)ResultCollectorc                 f    d| _         i | _        i | _        d| _        d| _        g | _        i | _        y )Nr   )totalfailedpassedtotal_casestotal_skipped_all_resultsreranselfs    r(   __init__zResultCollector.__init__M   s6    

r*   c                 "   | j                   j                  |       |s|| j                  |j                  <   nd| j                  |j                  <   | xj
                  |j                  z  c_        | xj                  |j                  z  c_        | S )NT)	r9   appendr5   namer6   r7   	run_countr8   skipped_countr<   results     r(   __iadd__zResultCollector.__iadd__W   sp      ('-DKK$'+DKK$F,,,f222r*   c                 n    | j                   j                  |       || j                  |j                  <   | S )z
        collector <<= result

        Stores the result, but does not count it towards
        the number of cases run, skipped, passed or failed.
        )r9   r?   r:   r@   rC   s     r(   __ilshift__zResultCollector.__ilshift__b   s/     	  ("(

6;;r*   c                 X    t        | j                  t        j                  d      d      S )zk
        A new list of RunResult objects, sorted from longest running
        to shortest running.
        run_durationT)keyreverse)sortedr9   operator
attrgetterr;   s    r(   longest_running_testsz%ResultCollector.longest_running_testsm   s*     d''"--n="$ 	$r*   N)__name__
__module____qualname__r=   rE   rG   propertyrO    r*   r(   r2   r2   K   s%    		 $ $r*   r2   c                       e Zd Zy)FailFastN)rP   rQ   rR   rT   r*   r(   rV   rV   x   s    r*   rV   c                   X    e Zd ZdZdZdddddedddZd Zd Zd	 Z	d
 Z
d Zd ZddZy)Runnerg?g?rT   Fallowed_return_codesconfigured_failing_testsfailfastquietconfigured_run_alone_testsworker_countsecond_chancec                "   || _         || _        || _        || _        |r|rJ || _        || _        t               | _        t        | j                         | j                  _	        g | _
        t        t        |      |      xs d| _        || _        y)a  
        :keyword allowed_return_codes: Return codes other than
           0 that are counted as a success. Needed because some versions
           of Python give ``unittest`` weird return codes.
        :keyword quiet: Set to True or False to explicitly choose. Set to
            `None` to use the default, which may come from the environment variable
            ``GEVENTTEST_QUIET``.
        r   N)_tests_configured_failing_tests_quiet_configured_run_alone_tests	_failfast_second_chancer2   resultslenr4   _running_jobsmin_worker_count_allowed_return_codes)	r<   testsrZ   r[   r\   r]   r^   r_   r`   s	            r(   r=   zRunner.__init__   s    $ )A&+E(//!+&( - U\:?a%9"r*   c                    | j                   |d<   | j                  | j                  |d<   t        j                  |fi |}|sY| j                  rM| xj
                  |z  c_        t        j                  d|j                  d       t        j                  |fi |}|s| j                  rt        |      | xj
                  |z  c_        y )NrZ   r]   z> %swarningcolor)
rm   rd   r	   runrg   rh   logr@   rf   rV   )r<   cmdkwargsrD   s       r(   _run_onezRunner._run_one   s    )-)C)C%&;;""kkF7O#(($--LLV#LHHVV[[	:XXc,V,F$..
 3-r*   c                    | j                   dd D ]g  }|j                         s|j                         r| j                   j                  |       @|j	                          t        j                  d|       i t        | j                         S )zLClean up the list of running jobs, returning how many are still outstanding.Nz!Internal error in testrunner.py: )rj   ready
successfulremovegetsysexitri   )r<   rs     r(   _reapzRunner._reap   sr    ##A& 	HA779||~""))!,!FG	H 4%%&&r*   c                     t        j                  dt        | j                        d       | j                  r>| j	                         sy t        j
                  | j                         | j                  r=y y )NzReaping %d jobsdebugrq   )r	   rt   ri   rj   r   sleepTIME_WAIT_REAPr;   s    r(   	_reap_allzRunner._reap_all   sP    "C(:(:$;7K  ::<JJt**+   r*   c                     	 | j                         | j                  k  r>|j                  | j                  |f|xs i       }| j                  j                  |       y t        j                  | j                         {r   )	r   rl   apply_asyncrw   rj   r?   r	   r   TIME_WAIT_SPAWN)r<   poolru   optionsjobs        r(   _spawnzRunner._spawn   se    zz|d000&&t}}sgw}"M""))#.JJt++, r*   c           
      L   t        j                  d| j                  dt        j                  ddt        z        d       | j                  dkD  xs | j
                  t         _        t        j                         }	 | j                          | j                          | j                  t        j                         |z
  d
       y # t        $ r? | j                  t        j                         |z
  d       t        j                  d	         t        j                           xY w)Nz+Running tests in parallel with concurrency  numberz(concurrency available: %d).r   F)r~   z(partial results)
T)r	   rt   rl   	_colorizeAVAIL_NWORKERSrd   BUFFER_OUTPUTperf_counter
_run_testsKeyboardInterrupt_report	traceback	print_excr   )r<   starts     r(   __call__zRunner.__call__   s    NN8%B^%ST
 	 "//!3Bt{{!!#	OO 	T&&(50t< ! 	LL**,u45LAHH*+	!s   =C AD#c                 X   g }| j                   }t        | j                        }	 |D ]H  \  }}|xs i }t        | j                  |      r|j                  ||f       6| j                  |||       J |j                          |j                          |r3t        j                  d       |D ]  \  }} | j                  |fi |  yy# t        $ rG 	 t        j                  d       | j                          Y y# t        $ r |j                           w xY w |j                           xY w)z#Runs the tests, produces no report.zRunning tests marked standalonez*Waiting for currently running to finish...N)rb   r   rl   matchesre   r?   r   closer$   r	   rt   rw   r   r   	terminate)r<   	run_alonern   r   ru   r   s         r(   r   zRunner._run_tests   s   	$,,-	 % 4W!-R4;;SA$$c7^4KKc734 JJLIIK:;$- 2LC!DMM#112  ! 	EF $  	NNs   B!C 	D)%C99DD)c                 N    | j                   }t        |||| j                         y )N)r~   tookr[   )rh   reportrc   )r<   elapsed_timer~   rh   s       r(   r   zRunner._report  s%    ,,%)%C%C		
r*   NF)rP   rQ   rR   r   r   DEFAULT_NWORKERSr=   rw   r   r   r   r   r   r   rT   r*   r(   rX   rX   {   sL    NO
 ')*,,..$ :D"
',-=0>
r*   rX   c                   $    e Zd Zd Zd Zd Zd Zy)TravisFoldingRunnerc                      | _         | _        t        t        t	        j
                                      _        |j                   fd}||_        y )Nc                      j                          	           j                          y # j                          w xY wr   )_begin_fold	_end_fold)	run_testsr<   s   r(   r   z0TravisFoldingRunner.__init__.<locals>._run_tests  s.    !  s   + =)_runner_travis_fold_msgstrintr	   r   _travis_fold_namer   )r<   runnertravis_fold_msgr   r   s   `   @r(   r=   zTravisFoldingRunner.__init__  sI     /!$S):):)<%=!> %%		! 'r*   c                 X    t        j                  | j                  | j                         y r   )r   
fold_startr   r   r;   s    r(   r   zTravisFoldingRunner._begin_fold#  s!    $00//	1r*   c                 B    t        j                  | j                         y r   )r   fold_endr   r;   s    r(   r   zTravisFoldingRunner._end_fold'  s    ../r*   c                 "    | j                         S r   )r   r;   s    r(   r   zTravisFoldingRunner.__call__*  s    ||~r*   N)rP   rQ   rR   r=   r   r   r   rT   r*   r(   r   r     s    '"10r*   r   c                   v    e Zd ZdZdZ	 	 	 	 	 	 	 d	dZ G d de      Zee	d               Z
ed        Zd Zd Zy)
	DiscoveryNc           	         |xs i | _         t        |xs d      | _        || _        |j	                  dt                     | _        || _        |rF|j                  d      }|D ]0  }| j                  j                  t        t        ||                   2 |r3| j                  j                  |j	                  dt                            |r|| _
        t        |      | _        y y )NrT   TEST_FILE_OPTIONS,IGNORE_COVERAGE)configsetignorern   r|   configured_test_optionsallow_combinesplitupdateload_list_from_filer&   r#   r'   )	r<   rn   ignore_filesignoredcoverager&   r   r   fs	            r(   r=   zDiscovery.__init__2  s     l'-R(
'-zz2Esu'M$*'--c2L! I""3':1g'F#GHI KKvzz*;SUCD"DL5g>D r*   c                      e Zd Zd Ze ej                  d       ej                  d      fd       Zed        Zed        Z	e ej                  d       ej                  d       ej                  d	       ej                  d
      fd       Z
d Zd Ze ej                  d      fd       Zd Zd Zd Zed        Zd ZddZd Zd Zy)Discovery.Discoveredc                     t        j                         | _        |d   | _        |d   | _        || _        || _        || _        || _        g | _	        g | _
        g | _        g | _        y )N	RUN_ALONEFAILING_TESTS)r    getcwdorig_dirconfigured_run_aloner[   r&   r   r   r   	to_importstd_monkey_patch_filesno_monkey_patch_filescommands)r<   r&   r   r   r   r   s         r(   r=   zDiscovery.Discovered.__init__N  se    IIKDM(.{(;D%,2?,CD)"DL+BD(!.D DKDN*,D')+D&DMr*   s   [^#].*patch_all\(\)s       .*patch_all\(\)c                 ^    t        |j                  |             xr |j                  |        S r   )boolsearch)contents_patch_present_patch_indenteds      r(   __makes_simple_monkey_patchz0Discovery.Discovered.__makes_simple_monkey_patch]  s4     ^**845 9 (..x88r*   c                 
    d| vS )Ns   testrunner-no-monkey-combinerT   r   s    r(   __file_allows_monkey_combinez1Discovery.Discovered.__file_allows_monkey_combinek  s    2(BBr*   c                 
    d| vS )Ns   testrunner-no-combinerT   r   s    r(   __file_allows_combinez*Discovery.Discovered.__file_allows_combineo  s    +8;;r*   s       greentest.main\(\)s       unittest.main\(\)s    from gevent.testing import.*mains       main\(\)c                     |j                  |       xs7 |j                  |       xs$ |j                  |       xr |j                  |       S r   r   )r   _greentest_main_unittest_main_import_main_mains        r(   __calls_unittest_main_toplevelz3Discovery.Discovered.__calls_unittest_main_toplevels  sM      &&x0 N!((2N ''1Lell86Lr*   c                 ~    t         xs6 || j                  v xs& || j                  v xs t        | j                  |      S r   )r   r   r   r   r[   )r<   r%   s     r(   __has_configz!Discovery.Discovered.__has_config  sJ     Dt;;;Dt888D 488(C	r*   c                     | j                   xr^ | j                  |       xrJ | j                  |      xr7 | j                  |      xr$ | j	                  |      xr | j                  |      S r   )r   _Discovered__has_config&_Discovered__makes_simple_monkey_patch'_Discovered__file_allows_monkey_combine _Discovered__file_allows_combine)_Discovered__calls_unittest_main_toplevelr<   r%   r   s      r(   __can_monkey_combinez)Discovery.Discovered.__can_monkey_combine  s}    "" B))(33B44X>B 55h?B ..x8	B
 77Ar*   s   [^#].*patch_\w*\(c                 &    |j                  |        S r   r   )r   r   s     r(   __makes_no_monkey_patchz,Discovery.Discovered.__makes_no_monkey_patch  s    %,,X666r*   c                     | j                   xrK | j                  |       xr7 | j                  |      xr$ | j                  |      xr | j	                  |      S r   )r   r   "_Discovered__makes_no_monkey_patchr   r   r   s      r(   __can_nonmonkey_combinez,Discovery.Discovered.__can_nonmonkey_combine  sg    "" B))(33B00:B ..x8B 77Ar*   c                 *    t         j                  dg}|S )N-u)r}   
executable)r<   ru   s     r(   __begin_commandz$Discovery.Discovered.__begin_command  s    >>4(C, Jr*   c                    d|v r| j                   j                  |       y | j                  ||      r/| j                  j                  | j                  r|       y |       y | j                  ||      r/| j                  j                  | j                  r|       y |       y | j                         }| j                  r|j                  d|z          n|j                  |       t        j                         }|j                  | j                  j                  |i              | j                  j                  ||f       y )Ns
   TESTRUNNER-m)r   r?   _Discovered__can_monkey_combiner   r&   "_Discovered__can_nonmonkey_combiner   _Discovered__begin_commandDEFAULT_RUN_OPTIONScopyr   r   r|   r   )r<   qualified_namer%   r   ru   r   s         r(   
__add_testzDiscovery.Discovered.__add_test  s    ( %%n5**8X>++22T\\>`W_`--hA**11DLL._V^_ **,<< JJtn45JJx(-224t;;??"MN$$c7^4r*   c                 V    | D cg c]  }|s|j                  d      r| c}S c c}w )N-)
startswith)lstxs     r(   __remove_optionsz%Discovery.Discovered.__remove_options  s#    "B!aS0AABBBs   &&&c                    | j                   D ]m  }t        j                  |      }|j                         D ]C  \  }}| j	                  |      d   | j
                  v r'| j                  j                  ||f       E o | j                   d d = y )N)r   r,   r-   
TESTRUNNER_Discovered__remove_optionsr   r   r?   )r<   r  moduleru   r   s        r(   __expand_importsz%Discovery.Discovered.__expand_imports  s    "&.. 9"00@$*$5$5$7 9LC,,S1"5D MM((#w899 q!r*   c                 N  	 |sy ddl m} ddg		fd} |||      D ]  \  }}| j                         }|j                  d       |j                  d       |D ]  }|j                  |        | j                  j                  d|t        j                         f        |d d = y )Nr   )groupbyc                 \    d   kD  rdd<   dxx   dz  cc<   dxx   dz  cc<   d   S )Nr   r   rT   )_cnt
group_sizes    r(   
make_groupz;Discovery.Discovered.__combine_commands.<locals>.make_group  s;    q6J&CFFaKFA!1vr*   r   unittest)	itertoolsr  r  r?   r   insertr  r  )
r<   filesr  r  r  r  groupru   r@   r  s
     `      @r(   __combine_commandsz'Discovery.Discovered.__combine_commands  s    )a&C $E:6 K5**,

4 

:&! %DJJt$%$$Q.A.F.F.H(IJK ar*   c                    |j                  d      r9|x}}|t        d      dz   d  }|j                  dt        j                        dz   }nBt        j
                  j                  |      d   }| j                  r| j                  dz   |z   n|}t        j
                  j                  |      }t        j
                  j                  |      s8|j                  d      s't        j
                  j                  |dz         r|dz  }t        |d      5 }|j                         }d d d        | j                  ||       y # 1 sw Y   xY w)Ngevent.testsr   r   .pyr   rb)r	  ri   replacer    sepr!   splitextr&   abspathexistsendswithopenread_Discovered__add_test)r<   r%   r  module_nameabs_filenamer   r   s          r(   
visit_filezDiscovery.Discovered.visit_file  s   "">2/77#C$7!$;$<=#++C85@ gg..x8;EI\\!3k!AWb 77??84L|4$--e4|e';<%lD) $Q 668$ OONHh?$ $s   D<<Ec                 (   |D ]  }| j                  |        t        j                  | j                        5  | j	                          d d d        | j                  | j                         | j                  | j                         y # 1 sw Y   @xY wr   )r/  r   _in_dirr   _Discovered__expand_imports_Discovered__combine_commandsr   r   )r<   	filenamesr%   s      r(   visit_filesz Discovery.Discovered.visit_files   sx    % *)*""4==1 (%%'(##D$?$?@##D$>$>?( (s   BBN   )rP   rQ   rR   r=   staticmethodrecompiler   r   r   r   r   r   r   r  r  r,  r  r2  r3  r/  r5  rT   r*   r(   
Discoveredr   M  s   	 
  *rzz*AB *

+B C	 
	 
	C 
	C 
	< 
	< 
 !+

+E F)rzz*CD'RZZ(LM bjj!12	 
			 
=GRZZH]=^ 	7 
	7		4	5< 
	C 
	C	"	4	@>	@r*   r;  c              #      K   t        j                         }| rt        j                  |        	 d  t        j                  |       y # t        j                  |       w xY wwr   )r    r   chdir)r'   olddirs     r(   r1  zDiscovery._in_dir(  sB      HH[!	HHVBHHVs   ,A#A	 A#	A  A#c                    | j                   }| j                  | j                  | j                  | j                  | j
                  | j                        }| j                  | j                        5  |s,t        t        j                  d            t        dg      z
  }nt        |      }| j                  r|| j                  z  }t        |      }|j                  |       d d d        |S # 1 sw Y   |S xY w)Nz	test_*.pyztest_support.py)rn   r;  r&   r   r   r   r   r1  r'   r   globrL   r5  )r<   rn   
discovereds      r(   rA  zDiscovery.discovered3  s    

__T\\43O3O%)[[$++t?Q?QS
 \\$**+ 	*DIIk23c;L:M6NNE
{{ $5ME""5)	*" #	*" s   /A1C**C4c                 @    t        | j                  j                        S r   )iterrA  r   r;   s    r(   __iter__zDiscovery.__iter__M  s    DOO,,--r*   c                 @    t        | j                  j                        S r   )ri   rA  r   r;   s    r(   __len__zDiscovery.__len__P  s    4??++,,r*   )NNrT   FNNT)rP   rQ   rR   r'   r&   r=   objectr;  r8  r   r1  r   rA  rD  rF  rT   r*   r(   r   r   .  ss    KG ?6Y@V Y@v    
 
2.-r*   r   c                     g }| r_t        t        | |            5 }|D ]9  }|j                  dd      d   j                         }|s)|j	                  |       ; 	 d d d        |S |S # 1 sw Y   |S xY w)N#r   r   )r*  r)   r   stripr?   )r%   r&   rD   r   r  s        r(   r   r   S  sy    F,Xw?@ 	%A %GGCOA&,,.MM!$%	%
 M6M	%
 Ms   +A&A&&A0c                 &   t        |t              rdj                  |      }| D ]k  }|s|j                  d      r|j	                  dd      }|j                  d|z         s!|j                  |j	                  dd            r yd|vse||k(  sk y y)Nr   zFLAKY  r"  TF)
isinstancelistr$   r	  r$  r)  )possibilitiescommandinclude_flakylines       r(   r   r   _  s    '4 ((7# !:||Hb)
 C$J'7+;+;DLLPR<S+Tw7d? r*   c                     | dk  rd| z  S t        t        t        |                   } | j                  d      r| dd  } | S )N   z%.1fssecondsz0:r   )r   r   roundr	  rU  s    r(   format_secondsrX  q  sE    |  )E'N34G$!"+Nr*   c                 r   | j                   }|sy t        j                  d       t        d|d   j                  z        }dt        |      z   dz   }t               }|D ]X  }t        j                  ||j                  |j                         |j                  |j                         t        |      |k\  sX y  y )Nz
Longest-running tests:z%.1fr   %z.1f seconds: %s)	rO   r	   rt   ri   rI   r   r   r@   add)result_collectorhow_manyrO   #length_of_longest_formatted_decimalfrmt
seen_namesrD   s          r(   _show_longest_runningra  z  s    ,BB  	HH'(*-f7LQ7O7\7\.\*]'899<MMDJ' v**FKK8v{{#z?h&	r*   c           	         | j                   }| j                  }| j                  }| j                  }| j                  }t        |        |rdt        |      z  }nd}g }	g }
g }|D ]"  }t        ||d      s|j                  |       $ |r-t        j                  dt        |      |d       t        |       | j                  rAt        j                  dt        | j                        |d	       t        | j                         |rt        j                  d
t        |      ||d	       |D ]3  }t        ||d      r|	j                  |       #|
j                  |       5 |	r-t        j                  dt        |	      |d	       t        |	       |
r-t        j                  dt        |
      |d       t        |
       t        j                  d||rt        j                  dd|z        nd||       |r]|
r(t        j                   t#        dt        |
                   |rt        j                   d       |dk  rt        j                   d       y y y )Nz in %srL  F)rQ  z
%s/%s unexpected passeserrorrq   z
%s/%s tests rerunrp   z
%s/%s tests failed%sTz
%s/%s expected failuresz
%s/%s unexpected failuresz
Ran %s tests%s in %s files%sskippedz (skipped=%d)r   e   r   zNo tests found.)r4   r5   r6   r7   r8   ra  rX  r   r?   r	   rt   ri   
print_listr:   r   r}   r~   rk   )r\  r~   r   r[   r4   r5   r6   r7   r8   failed_expectedfailed_unexpectedpassed_unexpectedr@   s                r(   r   r     s    ""E$$F$$F"..K$22M*+...O ++TG$$T*+ ,c2C.DeSZ[$%&,<,B,B(CUR[\#))*)3v;t9U 	/D/TJ&&t,!((.		/ HH0#o2FU^_'HH2C8I4JEY`a()HH(FSy/M"ABY[ HHSc"3456HHSMA:HH&'  r*   c                 >    | D ]  }t        j                  d|        y )Nz - %s)r	   rt   )r
  r@   s     r(   rf  rf    s      $ r*   c                    d } |d      rft         j                  rt         j                  dgk(  rBddg}t        s|j                  d       dj	                  |g dz         t
        j                  d<    |d      rd	t
        j                  d<    |d
      r| rdt
        j                  d
<    |d      r| rdt
        j                  d<    |d      rdt
        j                  d<    |d      r| rdt
        j                  d<   t         j                  j                  dk7  r(| s&dt
        j                  d<   dt
        j                  d<   t
        j                  j                  dd        t
        j                  D ci c]'  }|j                  d      r|t
        j                  |   ) }}t        d |D              }t        |j                               D ]  \  }}t        j                  d|||d       ! y c c}w )Nc                 T    t        t        j                  j                  |              S r   )r   r    environr|   )rJ   s    r(   not_setz_setup_environ.<locals>.not_set  s    

s+,,,r*   PYTHONWARNINGSdefaultzdefault::DeprecationWarningzdefault::ResourceWarningr   )zignore:::site:zignore:::pkgutil:zignore:::importlib._bootstrap:z'ignore:::importlib._bootstrap_external:z)ignore:::pkg_resources._vendor.pyparsing:zignore:::dns.namedict:zignore:::dns.hash:zignore:::dns.zone:PYTHONFAULTHANDLERtrueGEVENT_DEBUGr   PYTHONTRACEMALLOC10PYTHONDEVMODE1PYTHONMALLOCfinalrL  PYTHONSAFEPATH)PYTHONGEVENTc              3   2   K   | ]  }t        |        y wr   )ri   ).0ks     r(   	<genexpr>z!_setup_environ.<locals>.<genexpr>*  s     4a3q64s   z%*s	=	%srq   )r}   warnoptionsr   r?   r$   r    rm  version_inforeleaselevelpopr	  maxrL   itemsr	   rt   )r   rn  defaultsr  interesting_envswidest_kvs          r(   _setup_environr    s   - 	 !__OO	{2 )
 OO67'*xx <
 1
 (

#$2 #$+1

'(~5%,

>""# +/

&'&)

?#~5 &-

>"
$$/%.

>"&(

?# JJNN#T* <<,- 	
2::a= 
 4#344H'--/0 >1xAW=>s   6,G2c            
      T   dd l } | j                         }|j                  d       |j                  ddd       |j                  ddd	
       |j                  ddd       |j                  dddd       |j                  ddd       |j                  dddd       |j                  ddd
       |j                  ddt        t        d       |j                  dddd !       |j                  d"d#d$d%t
        d&'       |j                  d(d)d*+       |j                         }|j                  d,ddd-       |j                  d.d/ddd0       |j                  d1d23       |j                         }t        t        |j                  
t               n|j                              |_
        t        |j                        t        j                  d4<   t        |j                         |j                  t         _        d5t        j                  vr&t%        |j                        t        j                  d5<   g }g }g }d}|j&                  s t        j                  j)                  d6      rt*        rt,        rt/        d7       nd}t        j0                  j3                  d8      x}t        j                  d9<   t*        r2t        j0                  j3                  d:      x}t        j                  d9<   t        j0                  j5                  t6              }	t        j0                  j9                  |	d;      }
t        j0                  j3                  |
      }
|
t        j:                  z   t        j                  j)                  d<d=      z   t        j                  d<<   t        j0                  j3                  d>      t        j<                  z   d?z   t        j                  d@<   t/        dAt        j                  d@   dB|
dC|       t        j0                  j?                  |      sJ t        j0                  j?                  t        j0                  j9                  |
dD            sJ tA        |jB                  E       |jD                  rzi }tG        |jD                  |jH                        |_"        tK        |jD                        5 }|jM                         }d d d        tO        jP                  |       |dF   }|dG   }|dH   }tS        |jT                  |jV                  |||jH                  |jX                  I      }|jZ                  ra|D ]D  \  }}t/        t!        j\                  ||j)                  dJ      |j)                  dK      L             F t/        dMt_        |      z         y t*        rt`        rt/        dN       y |jH                  rZtc        |jH                        }t        j                  j)                  d<d=      t        j:                  z   |z   t        j                  d<<   dO}td        jf                  d dP dQk\  r|dRz  }ti        ||||jj                  |j                  ||jl                  |jn                  S      }|jp                  rts        ||jp                        } |        y # 1 sw Y   xY w)TNr   z--ignorez
--discover
store_truezOnly print the tests found.)actionhelpz--configzknown_failures.pyzkThe path to the config file containing FAILING_TESTS, IGNORED_TESTS and RUN_ALONE. Defaults to %(default)s.)rp  r  z
--coveragez+Enable coverage recording with coverage.py.z--quietTzRBe quiet. Defaults to %(default)s. Also the GEVENTTEST_QUIET environment variable.)r  rp  r  z	--verbosestore_falser]   )r  destz--debugFzEnable debug settings. If the GEVENT_DEBUG environment variable is not set, this sets it to 'debug'. This can also enable PYTHONTRACEMALLOC and the debug PYTHONMALLOC allocators, if not already set. Defaults to %(default)s.z	--packager!  z;Load tests from the given package. Defaults to %(default)s.z--processesz-jz[Use up to the given number of parallel processes to execute tests. Defaults to %(default)s.)rp  typer  z--no-combinez)Do not combine tests into process groups.)rp  r  r  r   z--usezRES1,RES2,...storea  specify which special resource intensive tests to run. "all" is the default; "none" may also be used. Disable individual resources with a leading -.For example, "-u-network". GEVENTTEST_USE_RESOURCES is used if no argument is given. To only use one resources, specify "-unone,resource".)metavarr  r  r  z--travis-foldMSGz2Emit Travis CI log fold markers around the output.)r  r  z--second-chancez"Give failed tests a second chance.z
--failfastz-xz%Stop running after the first failure.rn   *)nargsGEVENTTEST_USE_RESOURCESGEVENTTEST_QUIETGEVENTTEST_COVERAGEz,Ignoring coverage option on PyPy on CI; slowz.coveragercCOVERAGE_PROCESS_STARTz.coveragerc-pypycoveragesite
PYTHONPATHrL  r   z	.coverageCOVERAGE_FILEzEnabling coverage toz	with sitezand configuration filezsitecustomize.py)r   r   IGNORED_TESTSr   )r   r   r   r&   r   r   envsetenv)r  r  z%s tests found.zDNot running tests on pypy with c-ares; not a supported configurationrT      )r     r   r6  rY   ):argparseArgumentParseradd_argumentr   r   r
   add_mutually_exclusive_group
parse_argsrN  r   user   r    rm  r   r]   r	   QUIETr   r   r|   r   r   printr!   r'  r.   r/   r$   pathsepr%  r(  r  r   r   r)   r&   r*  r+  r   exec_r   rn   r   
no_combinediscovergetnameri   r   r#   r}   r  rX   r\   	processesr`   travis_foldr   )r  parserfail_parserr   r   r  r   r   
cov_configthis_dirsite_dirr   r   config_datarn   ru   r'   rZ   r   s                      r(   mainr  /  s   $$&F

#
\*   /#   \:  
 ,1  
 MH
,C   ^J   t%5C#  
 ]8   g&_-  . Q  S 557K,1  3 d<4  6 s+!G s0C?,UVGK .?w{{-KBJJ)*GKK  DJ+),W]]);

%&MMIH2::>>*?@M@AH@BP]@^^J$<=DFGGOOTfDgg
RZZ(@Awwx0Hww||Hn=Hwwx0H'/"**'<rzz~~l\^?_'_BJJ|$ +-''//#*>*G+*UBJJ' ("**_*Ex*J8 77>>*---77>>"'',,x9K"LMMM'~~3GNNGOOT'..! 	#Q&&(K	#		+v&//;'	^^((E ! 	[LC$,,sE(:7;;xCXYZ	[#e*,-MXY??0AK')zz~~lB'G"**'TWb'bBJJ|$!BQ:- !D( !5%2%%--'0 **!//	
 (1D1DEFg	# 	#s   8ZZ'__main__)Tr6  )TNrT   r   )=r9  r}   r    r@  rM   r   r,   
contextlibr   datetimer   multiprocessing.poolr   multiprocessingr   gevent._utilr   rL  r	   	resourcesr
   r   r   sysinfor   r   r   r   r   r   r   r   
__import__ImportErrorOSErrorTIMEOUTr   r   rm  r|   r  r   r  r)   r#   rG  r2   	ExceptionrV   rX   r   r   r   r   rX  ra  r   rf  r  r  rP   rT   r*   r(   <module>r     s{   
 
 	     %  + %   & & ( "   " #   
	{
 qrzz~~j1KS5KL b  G w 
  #q*$f *$Z	y 	R
V R
j& <c- c-J		$*  $&@(F W>tl^ zF u 	W 		s   E EE