
    z%ihP                        	 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mZ ddlm	Z	m
Z
mZ dZ ej                  dej                        Z G d de	j                         Zd	 Zd
 Zd Zd Zd Z G d de      Z e       ZddZej6                  dfdZdej6                  e
j:                  fdZdej6                  e
j:                  fdZy)    N)fnmatchfnmatchcase   )casesuiteutilTz[_a-z]\w*\.py$c                   ,     e Zd ZdZ fdZ fdZ xZS )_FailedTestNc                 :    || _         t        t        |   |       y N)
_exceptionsuperr
   __init__)selfmethod_name	exception	__class__s      C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/unittest/loader.pyr   z_FailedTest.__init__   s    #k4)+6    c                 X     | j                   k7  rt        t           |      S  fd}|S )Nc                       j                   r   )r   r   s   r   testFailurez,_FailedTest.__getattr__.<locals>.testFailure    s    //!r   )_testMethodNamer   r
   __getattr__)r   namer   r   s   `  r   r   z_FailedTest.__getattr__   s.    4'''d7==	"r   )__name__
__module____qualname__r   r   r   __classcell__r   s   @r   r
   r
      s    O7 r   r
   c                 d    d| dt        j                         }t        | t        |      ||      S )NzFailed to import test module: 
)	traceback
format_exc_make_failed_testImportError)r   
suiteClassmessages      r   _make_failed_import_testr*   %   s-    i""$&GT;w#7WMMr   c                 L    dt        j                         }t        | |||      S )NzFailed to call load_tests:
)r$   r%   r&   )r   r   r(   r)   s       r   _make_failed_load_testsr,   *   s)    2;2F2F2HJGiW. .r   c                 0    t        | |      } ||f      |fS r   )r
   )
methodnamer   r(   r)   tests        r   r&   r&   /   s     z9-Dtg''r   c                     t        j                  t        |            d        }| |i}t        dt         j                  f|      } | ||       f      S )Nc                      y r    r   s    r   testSkippedz'_make_skipped_test.<locals>.testSkipped4   s    r   ModuleSkipped)r   skipstrtypeTestCase)r.   r   r(   r3   attrs	TestClasss         r   _make_skipped_testr;   3   sS    	YYs9~ %E_t}}&6>Iy,.//r   c                 F    t         j                  j                  |       d   S )Nr   )ospathsplitext)r>   s    r   	_splitextr@   ;   s    77D!!$$r   c                        e Zd Z	 dZ eej                        ZdZe	j                  ZdZ fdZd ZdddZddZddZd	 Zdd
Zd Zd Zd Zd Zd Zd Z xZS )
TestLoaderr/   Nc                 V    t         t        |           g | _        t	               | _        y r   )r   rB   r   errorsset_loading_packages)r   r   s    r   r   zTestLoader.__init__J   s#    j$(* "%r   c                     	 t        |t        j                        rt        d      | j	                  |      }|st        |d      rdg}| j                  t        ||            }|S )NzYTest cases should not be derived from TestSuite. Maybe you meant to derive from TestCase?runTest)
issubclassr   	TestSuite	TypeErrorgetTestCaseNameshasattrr(   map)r   testCaseClasstestCaseNamesloaded_suites       r   loadTestsFromTestCasez TestLoader.loadTestsFromTestCaseQ   se    ImU__5 ( ) ) --m<	!B&KMs=-'HIr   patternc                   	 g }t        |      D ]Z  }t        ||      }t        |t              s t	        |t
        j                        s;|j                  | j                  |             \ t        |dd       }| j                  |      }|	  || ||      S |S # t        $ rK}t        |j                  || j                        \  }}	| j                  j                  |	       |cY d }~S d }~ww xY w)N
load_tests)dirgetattr
isinstancer7   rI   r   r8   appendrR   r(   	Exceptionr,   r   rD   )
r   modulerT   testsr   objrV   e
error_caseerror_messages
             r   loadTestsFromModulezTestLoader.loadTestsFromModule]   s    LK 	>D&$'C#t$C)GT77<=	>
 V\48
&!"!$w77   ",COOQ-9)
M""=1!!	"s   	B 	C-"A C("C-(C-c           
         	 |j                  d      }d\  }}|*|d d  }|r	 dj                  |      }t        |      }	 |dd  }|}	|D ]  }
	 |	t        |	|
      }	} t        |	t        j                         r| j#                  |	      S t        |	t$              r+t'        |	t(        j*                        r| j-                  |	      S t        |	t        j.                        rmt        t$              r]t'        |t(        j*                        rC|d   } ||      }t        t        ||      t        j.                        s.| j                  |g      S t        |	t0        j2                        r|	S t5        |	      ra |	       }t        |t0        j2                        r|S t        |t(        j*                        r| j                  |g      S t7        d|	d|d	      t7        d
|	z        # t        $ rM |j	                         }t        || j                        \  }}|s| j                  j                  |       |cY S Y nw xY w|r# t        $ r}t        |	dd       &|$| j                  j                  |       |cY d }~c S t        |
|| j                  dt        j                               \  }}| j                  j                  |       |cY d }~c S d }~ww xY w)N.NNr   __path__zFailed to access attribute:
zcalling z
 returned z, not a testz$don't know how to make test from: %s)splitjoin
__import__r'   popr*   r(   rD   rZ   rX   AttributeErrorr&   r$   r%   rY   types
ModuleTyperb   r7   rI   r   r8   rR   FunctionTyper   rJ   callablerK   )r   r   r\   partsr`   ra   
parts_copymodule_namenext_attributer^   partparentr_   instr/   s                  r   loadTestsFromNamezTestLoader.loadTestsFromNameq   s   	 

3$.!
M>qJ*"%((:"6K'4F !"IE 	&D&!73#5	&. c5++,++C00T"z#t}}'E--c22e001&/9D$<DgdD153E3EFv..U__-JC=5D$0D$--0v..!$d!, - - BSHIIu # *%/^^%5N0H&19-J%**=9)) &* & " &CT2>". KK&&}5%% 1Ba%002516-J KK&&}5%%%&s=   G H>AH54H5>	K+K2K:AKKKc                 n    	 |D cg c]  }| j                  ||       }}| j                  |      S c c}w r   )rx   r(   )r   namesr\   r   suitess        r   loadTestsFromNameszTestLoader.loadTestsFromNames   s@    	 DII4$((v6IIv&& Js   2c                      	  fd}t        t        |t                          } j                  r/|j	                  t        j                   j                               |S )Nc                    | j                  j                        syt        |       }t        |      sydj                  j
                  | fz  j                  d u xs t        fdj                  D              S )NFz%s.%s.%sc              3   6   K   | ]  }t        |        y wr   )r   ).0rT   fullNames     r   	<genexpr>zKTestLoader.getTestCaseNames.<locals>.shouldIncludeMethod.<locals>.<genexpr>   s     XwK'2Xs   )
startswithtestMethodPrefixrX   rp   r   r   testNamePatternsany)attrnametestFuncr   r   rO   s     @r   shouldIncludeMethodz8TestLoader.getTestCaseNames.<locals>.shouldIncludeMethod   s    &&t'<'<=}h7HH%!((-*D*Dh& H ((D0 YX$BWBWXXYr   )key)listfilterrW   sortTestMethodsUsingsort	functools
cmp_to_key)r   rO   r   testFnNamess   ``  r   rL   zTestLoader.getTestCaseNames   sX    	
	Y 6"5s=7IJK$$!5!5d6O6O!PQr   c                    	 d}|| j                   | j                   }n|d}|}t        j                  j                  |      }|t        j                  vr t        j                  j                  d|       || _         d}t        j                  j                  t        j                  j                  |            rct        j                  j                  |      }||k7  rt        j                  j                  t        j                  j                  |d             }n	 t        |       t        j                  |   }|j                  d      d   }	 t        j                  j                  t        j                  j                  |j                              }|r6| j%                  |      | _         t        j                  j'                  |       	 |rt)        d|z        t+        | j-                  ||            }| j/                  |      S # t        $ r8 |j                  t        j                   v rt#        d      d t#        d|      d w xY w# t(        $ r d}Y w xY w)	NFTr   __init__.pyrd   z2Can not use builtin modules as dotted module namesz don't know how to discover from z%Start directory is not importable: %r)_top_level_dirr=   r>   abspathsysinsertisdirisfileri   rj   modulesrh   dirname__file__rl   r   builtin_module_namesrK    _get_directory_containing_moduleremover'   r   _find_testsr(   )	r   	start_dirrT   top_level_dirset_implicit_topis_not_importable
the_moduletop_partr]   s	            r   discoverzTestLoader.discover   s   	6 ! T%8%8%D //M"#%M6(
 HHOOA}-+!77==34	2IM)(*rww||I}7](^$^!39% ![[3
$??3/2( ")<)<>!@I $*.*O*OPX*YD'HHOOM2E	QRRT%%i9:u%%% & (!**c.F.FF' )A BGKL (>znM#'((  )$(!)s    I AH AIIIc                    t         j                  |   }t        j                  j	                  |j
                        }t        j                  j                  |      j                         j                  d      r<t        j                  j                  t        j                  j                  |            S t        j                  j                  |      S )Nr   )
r   r   r=   r>   r   r   basenamelowerr   r   )r   rs   r\   	full_paths       r   r   z+TestLoader._get_directory_containing_module,  s    [)GGOOFOO4	77I&,,.99-H77??277??9#=>>
 77??9--r   c                    || j                   k(  ryt        t        j                  j	                  |            }t        j                  j                  || j                         }|j                  t        j                  j                  d      }|S Nrd   )r   r@   r=   r>   normpathrelpathreplacesep)r   r>   _relpathr   s       r   _get_name_from_pathzTestLoader._get_name_from_path8  sg    4&&&))$/077??4)<)<= S1r   c                 >    t        |       t        j                  |   S r   )rj   r   r   )r   r   s     r   _get_module_from_namez TestLoader._get_module_from_nameD  s    4{{4  r   c                     t        ||      S r   )r   )r   r>   r   rT   s       r   _match_pathzTestLoader._match_pathH  s    tW%%r   c              #   `  K   	 | j                  |      }|dk7  r,|| j                  vr| j                  ||      \  }}|| |sy t        t	        j
                  |            }|D ]  }t        j                  j                  ||      }| j                  ||      \  }}|| |sA| j                  |      }| j                  j                  |       	 | j                  ||      E d {    | j                  j                  |        y 7 "# | j                  j                  |       w xY wwr   )r   rF   _find_test_pathsortedr=   listdirr>   ri   addr   discard)	r   r   rT   r   r]   should_recursepathsr>   r   s	            r   r   zTestLoader._find_testsL  s$    =''	2 3;4t'='== %)$8$8G$L!E> ! rzz),- 	9DY5I$($8$8G$L!E> //	:&&**409#//	7CCC**2248	9 D**2248s6   B$D.',D.D)D*D.D.DD++D.c                 |   	 t         j                  j                  |      }t         j                  j                  |      rvt        j                  |      sy| j                  |||      sy| j                  |      }	 | j                  |      }t         j                  j                  t        |d|            }t        t         j                  j                  |            }t        t         j                  j                  |            }|j                         |j                         k7  ryt         j                  j                  |      }	t        t         j                  j                  |            }
t         j                  j                  |      }d}t        ||
|	|fz        | j!                  ||      dfS t         j                  j1                  |      rt         j                  j                  t         j                  j3                  |d            syd }d }| j                  |      }	 | j                  |      }t        |dd       }| j4                  j7                  |       	 | j!                  ||      }||df| j4                  j9                  |       S |df| j4                  j9                  |       S y# t"        j$                  $ r#}t'        ||| j(                        dfcY d }~S d }~w t+        || j(                        \  }}| j,                  j/                  |       |dfcY S xY w# | j4                  j9                  |       w xY w# t"        j$                  $ r#}t'        ||| j(                        dfcY d }~S d }~w t+        || j(                        \  }}| j,                  j/                  |       |dfcY S xY w)	N)NFr   zW%r module incorrectly imported from %r. Expected %r. Is this module globally installed?rS   Fr   rV   T)r=   r>   r   r   VALID_MODULE_NAMEmatchr   r   r   r   rX   r@   realpathr   r   r'   rb   r   SkipTestr;   r(   r*   rD   rZ   r   ri   rF   r   r   )r   r   rT   r   r   r\   mod_filer   fullpath_noext
module_dirmod_nameexpected_dirmsgr_   r`   ra   rV   r]   packages                      r   r   zTestLoader._find_test_pathl  s*   	 77##I.77>>)$$**84"##HiA"++I6DP33D9 77??FJ	:<$GG$$X.0!*GG$$Y/"1>>#~';';'==!#!:J(((3 5H#%77??9#=LDC%x\BBD D///H%OOWW]]9%77>>"'',,y-"HI"JE++I6D944T: %WlDA
&&**409 44Wg4NE!-$e| **2248 !$;**2248k == K)$4??CUJJ),T4??C *
M""=1!5((Z **2248% == K)$4??CUJJ),T4??C *
M""=1!5((sN   =J8 *M $L+ L+ 8L(K)#L()=L(+MN;M<6N;<=N;r   )ztest*.pyN)r   r   r   r   staticmethodr   three_way_cmpr   r   r   rJ   r(   r   r   rR   rb   rx   r|   rL   r   r   r   r   r   r   r   r    r!   s   @r   rB   rB   ?   s     '(:(:;JN'
 6: (LJ\'&Q&f
.
!&9@Hr   rB   c                 V    t               }||_        | |_        ||_        |r||_        |S r   )rB   r   r   r   r(   )prefix	sortUsingr(   r   loaders        r   _makeLoaderr     s1    \F"+F$F.F&Mr   c                 t    dd l }|j                  dt        d       t        |||      j	                  |       S )Nr   zunittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.getTestCaseNames() instead.   
stacklevel)r   )warningswarnDeprecationWarningr   rL   )rO   r   r   r   r   s        r   rL   rL     s?    MM	Eq  
 vy;KL]]^kllr   r/   c                 r    dd l }|j                  dt        d       t        |||      j	                  |       S )Nr   zunittest.makeSuite() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromTestCase() instead.r   r   )r   r   r   r   rR   )rO   r   r   r(   r   s        r   	makeSuiter     sB    MM	Jq  
 vy*5KK r   c                 r    dd l }|j                  dt        d       t        |||      j	                  |       S )Nr   zunittest.findTestCases() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromModule() instead.r   r   )r   r   r   r   rb   )r\   r   r   r(   r   s        r   findTestCasesr     sB    MM	Hq  
 vy*5II r   re   ) r=   rer   r$   rm   r   r   r    r   r   r   
__unittestcompile
IGNORECASEr   r8   r
   r*   r,   r&   r;   r@   objectrB   defaultTestLoaderr   r   rL   rJ   r   r   r2   r   r   <module>r      s     	 	 
    (  

 BJJ0"--@ $-- N
.
(0%u up L  7;6H6H[_ m %+d6H6H	 "(43E3E"__	r   