
    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 ddl	m
Z
 ddlmZ ej                  Zedz   ZdZdZej$                  j'                  e      Zd	j+                         Zej$                  j'                  e      Zd
ZdZdZ G d d      Z G d de      Z G d de      Z G d deej<                        Z G d deej<                        Z  G d deej<                        Z! G d deej<                        Z" G d deej<                        Z# G d d      Z$ G d d       Z% G d! d"ej<                        Z& G d# d$ej<                        Z'e(d%k(  r ejR                          yy)&z  Tests for the linecache module     N)
ModuleSpec)support)	os_helperz.missingz
!@$)(!@#_1 zlinecache abcz3
" Docstring "

def function():
    return result

z%
def f():
    return 1 + 1

a = f()

z
def f():
    return 3c                        e Zd Z fdZ xZS )TempFilec                 $   t         |           t        j                  d      5 }|j                  | _        |j                  | j                         d d d        | j                  t        j                  | j
                         y # 1 sw Y   4xY w)NF)delete)supersetUptempfileNamedTemporaryFilename	file_namewritefile_byte_string
addCleanupr   unlink)selffp	__class__s     ./root/Python-3.12.4/Lib/test/test_linecache.pyr   zTempFile.setUp,   sh    ((6 	,"WWDNHHT**+	, 		(($..9	, 	,s   -BB)__name__
__module____qualname__r   __classcell__r   s   @r   r   r   *   s    : :    r   c                   *     e Zd Z fdZd Zd Z xZS )GetLineTestsGoodDatac                     dj                  | j                        j                  d      | _        t        |           y )Nr   utf-8)join	file_listencoder   r   r   )r   r   s    r   r   zGetLineTestsGoodData.setUp7   s,     " 7 > >w Gr   c                 *   t        j                  | j                        5 }t        |      D ]P  \  }}|j	                  d      s|dz  }t        j                  | j                  |dz         }| j                  ||       R 	 d d d        y # 1 sw Y   y xY w)N
   )tokenizeopenr   	enumerateendswith	linecachegetlineassertEqual)r   r   indexlinecached_lines        r   test_getlinez!GetLineTestsGoodData.test_getline;   s    ]]4>>* 	4b(} 4t}}T*DLD'//	J  {34	4 	4 	4s   AB		Bc                 z    t        j                  | j                        }| j                  || j                         y N)r-   getlinesr   r/   r$   r   liness     r   test_getlinesz"GetLineTestsGoodData.test_getlinesD   s*    ""4>>2/r   )r   r   r   r   r3   r9   r   r   s   @r   r    r    4   s    40r   r    c                       e Zd Zd Zd Zy)GetLineTestsBadDatac                 d    | j                  t        j                  | j                  d      d       y )Nr(   r   )r/   r-   r.   r   r   s    r   r3   z GetLineTestsBadData.test_getlineL   s#    **4>>1=rBr   c                 b    | j                  t        j                  | j                        g        y r5   )r/   r-   r6   r   r=   s    r   r9   z!GetLineTestsBadData.test_getlinesO   s!    ++DNN;R@r   N)r   r   r   r3   r9    r   r   r;   r;   I   s    CAr   r;   c                       e Zd Zg Zy)	EmptyFileNr   r   r   r$   r?   r   r   rA   rA   S   s    Ir   rA   c                       e Zd ZdgZy)SingleEmptyLiner'   NrB   r?   r   r   rD   rD   W   s	    Ir   rD   c                       e Zd Zg dZy)GoodUnicode)u   á
zb
zabcdef
u   ááááá
NrB   r?   r   r   rF   rF   [   s    ;Ir   rF   c                       e Zd ZdZy)BadUnicode_NoDeclarations   
abcNr   r   r   r   r?   r   r   rH   rH   ^   s    #r   rH   c                       e Zd ZdZy)BadUnicode_WithDeclarations   # coding=utf-8
abcNrI   r?   r   r   rK   rK   a   s    1r   rK   c                       e Zd Zd Zy)
FakeLoaderc                     d| S )Nzsource for r?   r   fullnames     r   
get_sourcezFakeLoader.get_sourcef   s    XJ''r   Nr   r   r   rQ   r?   r   r   rM   rM   e   s    (r   rM   c                       e Zd Zd Zy)NoSourceLoaderc                      y r5   r?   rO   s     r   rQ   zNoSourceLoader.get_sourcek   s    r   NrR   r?   r   r   rT   rT   j   s    r   rT   c                   T    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d Zy)LineCacheTestsc                    t         j                  }| j                   |t        d      t               | j                   |t        d      t               | j                  t        |t        d       | j                   |t        d      t               | j                   |t        d      t               t        D ]o  }t        j                  j                  t        |      dz   }t        |d      5 }t        |      D ]!  \  }}| j                  | |||dz                # 	 d d d        q t        j                  d      }| j                  |g        y # 1 sw Y   xY w)	Ni   g?r(   .pyr"   encodingza/b/c/__init__.py)r-   r.   r/   FILENAMEEMPTYassertRaises	TypeErrorINVALID_NAMEMODULESospathr#   MODULE_PATHr*   r+   r6   )r   r.   entryfilenamefiler0   r1   emptys           r   r3   zLineCacheTests.test_getlineq   s1   ## 	51592.6 	)Wh< 	*E2q159  	IEww||K7%?Hh1 IT#,T? IKE4$$T78UQY+GHII I	I ""#67#I Is   .0EE	c                 Z   | j                  t        j                  t        j                         t	        t        j                  dd      5 }|j                  t               d d d        t        j                  t        j                        }| j                  |g d       y # 1 sw Y   AxY w)Nwr"   r[   )r'   z	def f():
z    return 3
)
r   r   r   TESTFNr*   r   SOURCE_3r-   r6   r/   )r   r   r8   s      r   test_no_ending_newlinez%LineCacheTests.test_no_ending_newline   sx    	(()*:*:;)""C': 	bHHX	""9#3#34 FG	 	s   B!!B*c                    g }t         D ]P  }t        j                  j                  t        |      dz   }|j                  |       t        j                  |d       R | j                  |g        |D cg c]  }|t        j                  vs| }}| j                  |g        t        j                          |D cg c]  }|t        j                  v s| }}| j                  |g        y c c}w c c}w )NrZ   r(   )rb   rc   rd   r#   re   appendr-   r.   assertNotEqualcacher/   
clearcache)r   cachedrf   rg   fncached_emptys         r   test_clearcachezLineCacheTests.test_clearcache   s     	+Eww||K7%?HMM(#h*	+ 	FB'%+Irr/HIIr* 	%+ErrY__/DEEr* J
 Fs   2C+
C+:C0C0c           
         t         j                  }t        j                  dz   }| j	                  t        j
                  |       t        |dd      5 }|j                  t               d d d         ||d       g }t        |d      5 }t        |      D ]2  \  }}| j                  | |||dz                |j                  |       4 	 d d d        t        |dd      5 }|j                  t               d d d        t        j                  d       t        |      D ]!  \  }}| j                  | |||dz                # t        j                  |       t        |d      5 }t        |      D ]2  \  }}| j                  | |||dz                |j                  |       4 	 d d d        y # 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrZ   rk   r"   r[   r(   dummy)r-   r.   r   rl   r   r   r*   r   SOURCE_1r+   r/   rp   SOURCE_2
checkcache)r   r.   source_namesourcesource_listr0   r1   s          r   test_checkcachezLineCacheTests.test_checkcache   s   ##&&.	((+6+sW5 	#LL"	#Q +0 	)F(0 )t  w{EAI'FG""4()	)
 +sW5 	#LL"	# 	W% %[1 	DKE4T7;	#BC	D 	[)+0 	)F(0 )t  w{EAI'FG""4()	) 	)/	# 	#	) 	)
	# 	#	) 	)s2   F/AF< G$AG/F9<GGGc                    t        j                  t              }t        j                          | j	                  dt        j
                  t        d              | j	                  |t        j                  t                     y )NF)r-   r6   r]   rs   r/   	lazycacher7   s     r   test_lazycache_no_globalsz(LineCacheTests.test_lazycache_no_globals   sV    ""8,	 3 3Hd CD	 2 28 <=r   c                    t        j                  t        t                     }t        j                          | j                  dt        j                  t        t                            | j                  dt        t         j                  t                        | j                  |t        j                  t                     y )NTr(   )	r-   r6   NONEXISTENT_FILENAMEglobalsrs   r/   r   lenrr   r7   s     r   test_lazycache_smokez#LineCacheTests.test_lazycache_smoke   s    ""#7C)%%&:GIF	HC	0D EFG 		 2 23G HIr   c                 `   t        j                          t        j                  t        t	                     }t        j                          t        j                  t               t        j
                  t        t	                      | j                  |t        j                  t                     y r5   )r-   rs   r6   r   r   r   r/   updatecacher7   s     r   *test_lazycache_provide_after_failed_lookupz9LineCacheTests.test_lazycache_provide_after_failed_lookup   sm    ""#7C/00')<	 5 56J KLr   c                     t        j                          t        j                  t        t	                      t        j
                          y r5   )r-   rs   r   r   r   r|   r=   s    r   test_lazycache_checkz#LineCacheTests.test_lazycache_check   s-    0')<r   c                     t        j                          | j                  dt        j                  dt	                            | j                  dt        j                  dt	                            y )NFr   z<foo>)r-   rs   r/   r   r   r=   s    r   test_lazycache_bad_filenamez*LineCacheTests.test_lazycache_bad_filename   sL    	 3 3B	 BC	 3 3GWY GHr   c                 4   t        j                          t        j                  t        t	                     }| j                  dt        j                  t        t	                            | j                  dt        t         j                  t                        y )NF   )	r-   rs   r6   r   r   r/   r   r   rr   r7   s     r   test_lazycache_already_cachedz,LineCacheTests.test_lazycache_already_cached   si    ""#7C 4gi@	B 	C	0D EFGr   c                 D   t        j                  t              }| j                  |       d }t	        j
                  t         d|      5  t        j                  t              }d d d        | j                  |       t        j                          t	        j
                  t         d|      5  t        j                  t              }d d d        | j                  g        | j                  t        j                  t              |       y # 1 sw Y   xY w# 1 sw Y   QxY w)Nc                      t         r5   )MemoryError)argskwargss     r   raise_memoryerrorz:LineCacheTests.test_memoryerror.<locals>.raise_memoryerror   s    r   r   )r-   r6   r]   
assertTruer   	swap_attrr/   rs   )r   r8   r   lines2lines3s        r   test_memoryerrorzLineCacheTests.test_memoryerror   s    ""8,	y-9JK 	2''1F	2'y-9JK 	2''1F	2$++H5u=	2 	2
	2 	2s   	D
,D
DDc                    d}d t               t               fD ]A  }t        j                          d|d}| j	                  t        j
                  ||      g        C t        j                          dt               d}| j	                  t        j
                  ||      dg       d t               t        dt                     fD ]K  }t        j                          dt               |d}| j	                  t        j
                  ||      dg       M t        j                          t        dt                     }d|j                  |d}| j	                  t        j
                  ||      dg       y )	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
)	objectrT   r-   rs   r/   r6   rM   r   loader)r   rg   r   module_globalsspecs        r   test_loaderzLineCacheTests.test_loader   sI   "VX~'78 	OF  "*1HNY//.I2N	O
 	&-Z\J++HnE./	1 68ZJL%AB 	5D  "*1*.0NY//.I235		5 	':<0&-T[[&*,++HnE./	1r   N)r   r   r   r3   rn   rw   r   r   r   r   r   r   r   r   r   r?   r   r   rW   rW   o   sD    $2H+")B>JM
I
H>1r   rW   c                   0     e Zd Z fdZd Zd Zd Z xZS )LineCacheInvalidationTestsc                 >   t         |           t        j                          t        j
                  dz   | _        t        j
                  dz   | _        t        j
                  dz   | _        | j                  | j                  | j                  fD ]  }| j                  t        j                  |       t        |dd      5 }|j                  d| d       d d d        | j                  |t        j                         t        j                  |       | j!                  |t        j                          t#        j$                  | j                         t        | j                  dd      5 }|j                  d	       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nz.1z.2z.3rk   r"   r[   zprint("I am z")zprint("was modified"))r   r   r-   rs   r   rl   deleted_filemodified_fileunchanged_filer   r   r*   r   assertNotInrr   r6   assertInrc   remove)r   fnamer~   r   s      r   r   z LineCacheInvalidationTests.setUp  sP   %,,t3&--4'..5''(())+ 		2E OOI,,e4eS73 7v|E7"567 UIOO4u%MM%1		2 			$##$$$$cG< 	2LL01	2 	27 7	2 	2s    F,FF	Fc                 >   t        j                  | j                         | j                  | j                  t         j                         | j                  | j                  t         j                         | j                  | j                  t         j                         y r5   )r-   r|   r   r   rr   r   r   r   r=   s    r    test_checkcache_for_deleted_filez;LineCacheInvalidationTests.test_checkcache_for_deleted_file/  s`    T../**IOO<d(()//:d))9??;r   c                 >   t        j                  | j                         | j                  | j                  t         j
                         | j                  | j                  t         j
                         | j                  | j                  t         j
                         y r5   )r-   r|   r   r   r   rr   r   r   r=   s    r   !test_checkcache_for_modified_filez<LineCacheInvalidationTests.test_checkcache_for_modified_file5  s`    T//0d''9++Y__=d))9??;r   c                 (   t        j                          | j                  | j                  t         j                         | j                  | j
                  t         j                         | j                  | j                  t         j                         y r5   )r-   r|   r   r   rr   r   r   r   r=   s    r   !test_checkcache_with_no_parameterz<LineCacheInvalidationTests.test_checkcache_with_no_parameter;  sZ    **IOO<++Y__=d))9??;r   )r   r   r   r   r   r   r   r   r   s   @r   r   r     s    2,<<<r   r   __main__)*__doc__r-   unittestos.pathrc   r   r)   importlib.machineryr   testr   test.supportr   __file__r]   r   ra   r^   rd   dirname	TEST_PATHsplitrb   re   rz   r{   rm   r   r    r;   TestCaserA   rD   rF   rH   rK   rM   rT   rW   r   r   mainr?   r   r   <module>r      sl   &      *  " *, 
GGOOH%	



!ggooh'
: :08 0*A( A$h&7&7 *H,=,= <&(9(9 <$2H4E4E $2!4h6G6G 2( (
 
f1X&& f1R'<!2!2 '<T zHMMO r   