
    0hh4                        S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJr  SSKJr  \R                  r\S-   rSrS	r\R(                  R+                  \5      rS
R/                  5       r\R(                  R+                  \5      rSrSrSr " S S5      r " S S\5      r " S S\5      r " S S\\R@                  5      r! " S S\\R@                  5      r" " S S\\R@                  5      r# " S S\\R@                  5      r$ " S S\\R@                  5      r% " S S5      r& " S  S!5      r' " S" S#\R@                  5      r( " S$ S%\R@                  5      r)\*S&:X  a  \RV                  " 5         gg)'zTests for the linecache module     N)
ModuleSpec)support)	os_helper)assert_python_okz.missingz
!@$)(!@#_1 zlinecache abcz3
" Docstring "

def function():
    return result

z%
def f():
    return 1 + 1

a = f()

z
def f():
    return 3c                   (   ^  \ rS rSrU 4S jrSrU =r$ )TempFile+   c                 *  > [         TU ]  5         [        R                  " SS9 nUR                  U l        UR                  U R                  5        S S S 5        U R                  [        R                  U R
                  5        g ! , (       d  f       N9= f)NF)delete)supersetUptempfileNamedTemporaryFilename	file_namewritefile_byte_string
addCleanupr   unlink)selffp	__class__s     </opt/python-3.13.8/usr/lib/python3.13/test/test_linecache.pyr   TempFile.setUp-   sa    ((6"WWDNHHT**+ 7 		(($..9 76s   -B
B)r   )__name__
__module____qualname____firstlineno__r   __static_attributes____classcell__r   s   @r   r	   r	   +   s    : :    r	   c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )GetLineTestsGoodData5   c                    > SR                  U R                  5      R                  S5      U l        [        TU ]  5         g )Nr   utf-8)join	file_listencoder   r   r   )r   r   s    r   r   GetLineTestsGoodData.setUp8   s,     " 7 > >w Gr#   c                 @   [         R                  " U R                  5       n[        U5       HU  u  p#UR	                  S5      (       d  US-  n[
        R                  " U R                  US-   5      nU R                  X45        MW     S S S 5        g ! , (       d  f       g = f)N
   )tokenizeopenr   	enumerateendswith	linecachegetlineassertEqual)r   r   indexlinecached_lines        r   test_getline!GetLineTestsGoodData.test_getline<   sp    ]]4>>*b(}}}T**DLD'//	J  3  - +**s   A%B
Bc                 z    [         R                  " U R                  5      nU R                  XR                  5        g N)r4   getlinesr   r6   r*   r   liness     r   test_getlines"GetLineTestsGoodData.test_getlinesE   s(    ""4>>2/r#   )r   )	r   r   r   r   r   r:   rA   r    r!   r"   s   @r   r%   r%   5   s    40 0r#   r%   c                        \ rS rSrS rS rSrg)GetLineTestsBadDataJ   c                 f    U R                  [        R                  " U R                  S5      S5        g )Nr/   r   )r6   r4   r5   r   r   s    r   r:    GetLineTestsBadData.test_getlineM   s#    **4>>1=rBr#   c                 d    U R                  [        R                  " U R                  5      / 5        g r=   )r6   r4   r>   r   rG   s    r   rA   !GetLineTestsBadData.test_getlinesP   s!    ++DNN;R@r#    N)r   r   r   r   r:   rA   r    rK   r#   r   rD   rD   J   s    CAr#   rD   c                       \ rS rSr/ rS rSrg)	EmptyFileT   c                 j    [         R                  " U R                  5      nU R                  US/5        g )Nr.   )r4   r>   r   r6   r?   s     r   rA   EmptyFile.test_getlinesW   s(    ""4>>2'r#   rK   N)r   r   r   r   r*   rA   r    rK   r#   r   rM   rM   T   s    I(r#   rM   c                       \ rS rSrS/rSrg)SingleEmptyLine\   r.   rK   Nr   r   r   r   r*   r    rK   r#   r   rR   rR   \   s	    Ir#   rR   c                       \ rS rSr/ SQrSrg)GoodUnicode`   )u   á
zb
zabcdef
u   ááááá
rK   NrT   rK   r#   r   rV   rV   `   s    ;Ir#   rV   c                       \ rS rSrSrSrg)BadUnicode_NoDeclarationc   s   
abcrK   Nr   r   r   r   r   r    rK   r#   r   rY   rY   c   s    #r#   rY   c                       \ rS rSrSrSrg)BadUnicode_WithDeclarationf   s   # coding=utf-8
abcrK   Nr[   rK   r#   r   r]   r]   f   s    1r#   r]   c                       \ rS rSrS rSrg)
FakeLoaderj   c                     SU 3$ )Nzsource for rK   r   fullnames     r   
get_sourceFakeLoader.get_sourcek   s    XJ''r#   rK   Nr   r   r   r   re   r    rK   r#   r   r`   r`   j   s    (r#   r`   c                       \ rS rSrS rSrg)NoSourceLoadero   c                     g r=   rK   rc   s     r   re   NoSourceLoader.get_sourcep   s    r#   rK   Nrg   rK   r#   r   ri   ri   o   s    r#   ri   c                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)LineCacheTestst   c                    [         R                  nU R                  U" [        S5      [        5        U R                  U" [        S5      [        5        U R                  [        U[        S5        U R                  U" [        S5      [        5        U R                  U" [        S5      [        5        [         Hk  n[        R                  R                  [        U5      S-   n[        USS9 n[        U5       H  u  pVU R                  Xa" X5S-   5      5        M!     S S S 5        Mm     [         R                  " S5      nU R                  U/ 5        g ! , (       d  f       M  = f)	Ni   g?r/   .pyr(   encodingza/b/c/__init__.py)r4   r5   r6   FILENAMEEMPTYassertRaises	TypeErrorINVALID_NAMEMODULESospathr)   MODULE_PATHr1   r2   r>   )r   r5   entryfilenamefiler7   r8   emptys           r   r:   LineCacheTests.test_getlinev   s   ## 	51592.6 	)Wh< 	*E2q159 Eww||K7%?Hh1T#,T?KE$$T78QY+GH $3 21  ""#67# 21s   +/E
E	c                 `   U R                  [        R                  [        R                  5        [	        [        R                  SSS9 nUR                  [        5        S S S 5        [        R                  " [        R                  5      nU R                  U/ SQ5        g ! , (       d  f       NG= f)Nwr(   rs   )r.   z	def f():
z    return 3
)
r   r   r   TESTFNr1   r   SOURCE_3r4   r>   r6   )r   r   r@   s      r   test_no_ending_newline%LineCacheTests.test_no_ending_newline   sq    	(()*:*:;)""C':bHHX ;""9#3#34 FG ;:s   B
B-c                    / n[          HR  n[        R                  R                  [        U5      S-   nUR                  U5        [        R                  " US5        MT     U R                  U/ 5        U Vs/ s H  oD[        R                  ;  d  M  UPM     nnU R                  U/ 5        [        R                  " 5         U Vs/ s H  oD[        R                  ;   d  M  UPM     nnU R                  U/ 5        g s  snf s  snf )Nrr   r/   )rz   r{   r|   r)   r}   appendr4   r5   assertNotEqualcacher6   
clearcache)r   cachedr~   r   fncached_emptys         r   test_clearcacheLineCacheTests.test_clearcache   s    Eww||K7%?HMM(#h*  	FB'%+IVr/HVIr* 	%+EVrY__/DVEr* J
 Fs   5C9C9C>C>c           
         [         R                  n[        R                  S-   nU R	                  [        R
                  U5        [        USSS9 nUR                  [        5        S S S 5        U" US5        / n[        USS9 n[        U5       H0  u  pVU R                  Xa" X%S-   5      5        UR                  U5        M2     S S S 5        [        USSS9 nUR                  [        5        S S S 5        [         R                  " S5        [        U5       H  u  pVU R                  Xa" X%S-   5      5        M!     [         R                  " U5        [        USS9 n[        U5       H0  u  pVU R                  Xa" X%S-   5      5        UR                  U5        M2     S S S 5        g ! , (       d  f       GNB= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nrr   r   r(   rs   r/   dummy)r4   r5   r   r   r   r   r1   r   SOURCE_1r2   r6   r   SOURCE_2
checkcache)r   r5   source_namesourcesource_listr7   r8   s          r   test_checkcacheLineCacheTests.test_checkcache   s   ##&&.	((+6+sW5LL" 6Q +0F(0  w{AI'FG""4(  1 1
 +sW5LL" 6 	W% %[1KET7;	#BC 2 	[)+0F(0  w{AI'FG""4(  1 10/ 65 10
 65 10s2   F A F2GA G 
F/2
G 
G
G"c                    [         R                  " [        5      n[         R                  " 5         U R	                  S[         R
                  " [        S 5      5        U R	                  U[         R                  " [        5      5        g )NF)r4   r>   ru   r   r6   	lazycacher?   s     r   test_lazycache_no_globals(LineCacheTests.test_lazycache_no_globals   sV    ""8,	 3 3Hd CD	 2 28 <=r#   c                    [         R                  " [        [        5       5      n[         R                  " 5         U R                  S[         R                  " [        [        5       5      5        U R                  S[        [         R                  [           5      5        U R                  U[         R                  " [        5      5        g )NTr/   )	r4   r>   NONEXISTENT_FILENAMEglobalsr   r6   r   lenr   r?   s     r   test_lazycache_smoke#LineCacheTests.test_lazycache_smoke   s    ""#7C)%%&:GIF	HC	0D EFG 		 2 23G HIr#   c                 l   [         R                  " 5         [         R                  " [        [	        5       5      n[         R                  " 5         [         R                  " [        5        [         R
                  " [        [	        5       5        U R                  U[         R                  " [        5      5        g r=   )r4   r   r>   r   r   r   r6   updatecacher?   s     r   *test_lazycache_provide_after_failed_lookup9LineCacheTests.test_lazycache_provide_after_failed_lookup   sm    ""#7C/00')<	 5 56J KLr#   c                     [         R                  " 5         [         R                  " [        [	        5       5        [         R
                  " 5         g r=   )r4   r   r   r   r   r   rG   s    r   test_lazycache_check#LineCacheTests.test_lazycache_check   s-    0')<r#   c                     [         R                  " 5         U R                  S[         R                  " S[	        5       5      5        U R                  S[         R                  " S[	        5       5      5        g )NFr   z<foo>)r4   r   r6   r   r   rG   s    r   test_lazycache_bad_filename*LineCacheTests.test_lazycache_bad_filename   sL    	 3 3B	 BC	 3 3GWY GHr#   c                 :   [         R                  " 5         [         R                  " [        [	        5       5      nU R                  S[         R                  " [        [	        5       5      5        U R                  S[        [         R                  [           5      5        g )NF   )	r4   r   r>   r   r   r6   r   r   r   r?   s     r   test_lazycache_already_cached,LineCacheTests.test_lazycache_already_cached   si    ""#7C 4gi@	B 	C	0D EFGr#   c                 f   [         R                  " [        5      nU R                  U5        S n[        R
                  " [         SU5         [         R                  " [        5      nS S S 5        U R                  WU5        [         R                  " 5         [        R
                  " [         SU5         [         R                  " [        5      nS S S 5        U R                  W/ 5        U R                  [         R                  " [        5      U5        g ! , (       d  f       N= f! , (       d  f       N\= f)Nc                      [         er=   )MemoryError)argskwargss     r   raise_memoryerror:LineCacheTests.test_memoryerror.<locals>.raise_memoryerror   s    r#   r   )r4   r>   ru   
assertTruer   	swap_attrr6   r   )r   r@   r   lines2lines3s        r   test_memoryerrorLineCacheTests.test_memoryerror   s    ""8,	y-9JK''1F L'y-9JK''1F L$++H5u= LK
 LKs   D1D"
D"
D0c                    SnS [        5       [        5       4 HC  n[        R                  " 5         SUS.nU R	                  [        R
                  " X5      / 5        ME     [        R                  " 5         S[        5       S.nU R	                  [        R
                  " X5      S/5        S [        5       [        S[        5       5      4 HM  n[        R                  " 5         S[        5       US.nU R	                  [        R
                  " X5      S/5        MO     [        R                  " 5         [        S[        5       5      nSUR                  US.nU R	                  [        R
                  " X5      S/5        g )	Nzscheme://pathza.b.c)r   
__loader__zsource for a.b.c
r   )r   r   __spec__zx.y.zzsource for x.y.z
)	objectri   r4   r   r6   r>   r`   r   loader)r   r   r   module_globalsspecs        r   test_loaderLineCacheTests.test_loader  s6   "VX~'78F  "*1HNY//I2N 9
 	&-Z\J++HE./	1 68ZJL%ABD  "*1*.0NY//I235	 C 	':<0&-T[[&*,++HE./	1r#   c                    S[         S-   S4SSS-  S44 GH  u  pU R                  SU 35         [        R                  " 5         [        R                  " U5      nU R                  U/ 5        U R                  U[        R                  5        S S S 5        US	4S
U4X44 H  u  pEU R                  SU 3XES9   [        R                  " 5         SS/ U4[        R                  U'   [        R                  " U5        U R                  U[        R                  5        S S S 5        M     GM     [        R                  " 5         g ! , (       d  f       N= f! , (       d  f       M  = f)N) zNUL bytes filenamer   z filename with embedded NUL bytes)u	   .pyz'surrogate codes (MUSICAL SYMBOL G CLEF)ai@B zvery long filenamezupdatecache: okkeyzcheckcache: )r   rd   r   i  )	__file__subTestr4   r   r   assertListEqualassertNotInr   r   )r   r   descr@   r   rd   s         r   test_invalid_names!LineCacheTests.test_invalid_names  s>   * BC K 9_23

JD dV45$$&!--d3$$UB/  y7	 6 $(,|!L\\L"7&) " >((*,-tR+BIOOC(((-$$S)//:> > "M'

8 	# 65> >s   AE7A#E
E	
E!c                     Sn[        SU5      u  p#nU R                  US5        U R                  US5        U R                  US5        g )Nz1import linecache;assert len(linecache.cache) == 0z-cr   r#   )r   r6   )r   cmdlineretcodestdoutstderrs        r   test_linecache_python_string+LineCacheTests.test_linecache_python_string;  sH    E"24"A!$%%r#   rK   N)r   r   r   r   r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rK   r#   r   rn   rn   t   sN    $2H+")B>JM
I
H>16>&r#   rn   c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )LineCacheInvalidationTestsiB  c                 P  > [         TU ]  5         [        R                  " 5         [        R
                  S-   U l        [        R
                  S-   U l        [        R
                  S-   U l        U R                  U R                  U R                  4 H  nU R                  [        R                  U5        [        USSS9 nUR                  SU S35        S S S 5        U R                  U[        R                  5        [        R                  " U5        U R!                  U[        R                  5        M     ["        R$                  " U R                  5        [        U R                  SSS9 nUR                  S	5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nz.1z.2z.3r   r(   rs   zprint("I am z")zprint("was modified"))r   r   r4   r   r   r   deleted_filemodified_fileunchanged_filer   r   r1   r   r   r   r>   assertInr{   remove)r   fnamer   r   s      r   r    LineCacheInvalidationTests.setUpC  s;   %,,t3&--4'..5''(())+E OOI,,e4eS73v|E7"56 4 UIOO4u%MM%1+ 			$##$$$$cG<LL01 =< 43 =<s   >F+F
F	
F%c                 @   [         R                  " U R                  5        U R                  U R                  [         R                  5        U R                  U R                  [         R                  5        U R                  U R                  [         R                  5        g r=   )r4   r   r   r   r   r   r   r   rG   s    r    test_checkcache_for_deleted_file;LineCacheInvalidationTests.test_checkcache_for_deleted_fileY  s`    T../**IOO<d(()//:d))9??;r#   c                 @   [         R                  " U R                  5        U R                  U R                  [         R
                  5        U R                  U R                  [         R
                  5        U R                  U R                  [         R
                  5        g r=   )r4   r   r   r   r   r   r   r   rG   s    r   !test_checkcache_for_modified_file<LineCacheInvalidationTests.test_checkcache_for_modified_file_  s`    T//0d''9++Y__=d))9??;r#   c                 *   [         R                  " 5         U R                  U R                  [         R                  5        U R                  U R
                  [         R                  5        U R                  U R                  [         R                  5        g r=   )r4   r   r   r   r   r   r   r   rG   s    r   !test_checkcache_with_no_parameter<LineCacheInvalidationTests.test_checkcache_with_no_parametere  sZ    **IOO<++Y__=d))9??;r#   )r   r   r   )
r   r   r   r   r   r   r   r   r    r!   r"   s   @r   r   r   B  s    2,<<< <r#   r   __main__),__doc__r4   unittestos.pathr{   r   r0   importlib.machineryr   testr   test.supportr   test.support.script_helperr   r   ru   r   ry   rv   r|   dirname	TEST_PATHsplitrz   r}   r   r   r   r	   r%   rD   TestCaserM   rR   rV   rY   r]   r`   ri   rn   r   r   mainrK   r#   r   <module>r      sm   &      *  " 7 *, 
GGOOH%	



!ggooh'
: :08 0*A( A($h&7&7 (*H,=,= <&(9(9 <$2H4E4E $2!4h6G6G 2( (
 
L&X&& L&\'<!2!2 '<T zMMO r#   