
    0hh7                        S SK JrJr  S SK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
JrJrJr  S SKJr  SSSSS	S
S.r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    )TestCasemockN)captured_stderrcaptured_stdoutscript_helperfindfile)unlinkzCfruits = [
    "Apple",
    "Orange",
    "Banana",

print(fruits)
zLif True:
    print("hello")
  print("world")
else:
    print("else called")
zIif True:
 	print("hello")
	print("world")
else:
    print("else called")
zNif True:
    print("hello")
    print("world")
else:
    print("else called")
zGdef my_func():
	  print("hello world")
	  if True:
		print("If called")zLdef my_func():
		print("Hello world")
		if True:
	        print("If called"))incomplete_expressionwrong_indentednannynag_errored
error_freetab_space_errored_1tab_space_errored_2c                   *    \ rS rSrSS jrS rS rSrg)TemporaryPyFile?   Nc                     Xl         X l        g N)source_codedir)selfr   	directorys      ;/opt/python-3.13.8/usr/lib/python3.13/test/test_tabnanny.py__init__TemporaryPyFile.__init__B   s    &    c                     [         R                  " SU R                  SSS9 nUR                  U R                  5        S S S 5        WR
                  U l        U R                  $ ! , (       d  f       N+= f)Nwz.pyF)moder   suffixdelete)tempfileNamedTemporaryFiler   writer   name	file_path)r   fs     r   	__enter__TemporaryPyFile.__enter__F   sY    (($((5
GGD$$%
 ~~
 
s   A##
A1c                 .    [        U R                  5        g r   )r	   r&   )r   exc_type	exc_valueexc_tracebacks       r   __exit__TemporaryPyFile.__exit__N   s    t~~r   )r   r&   r   ) N)__name__
__module____qualname____firstlineno__r   r(   r.   __static_attributes__ r   r   r   r   ?   s    r   r   c                       \ rS rSrS rSrg)TestFormatWitnessesR   c                     / SQnU HC  u  p#U R                  X#S9   U R                  [        R                  " U5      U5        S S S 5        ME     g ! , (       d  f       MW  = f)N))Testzat tab sizes T, e, s, t)r0   zat tab size )tzat tab size t)z  t  zat tab sizes  ,  , t,  ,  )wordsexpected)subTestassertEqualtabnannyformat_witnesses)r   testsr=   r>   s       r   test_format_witnesses)TestFormatWitnesses.test_format_witnessesU   sO    
  %OEE=  !:!:5!A8L >=  %==s   'A
A	r6   N)r1   r2   r3   r4   rD   r5   r6   r   r   r8   r8   R   s    Mr   r8   c                       \ rS rSrS rSrg)TestErrPrintc   c           	         SS/S4S/S4/ SQS4/ S4/nU H  u  p#U R                  X#S9   U R                  [        5         [        5        n[        R
                  " U6   S S S 5        U R                  WR                  5       U5        S S S 5        S S S 5        M     g ! , (       d  f       NC= f! , (       d  f       N,= f! , (       d  f       M  = f)	Nfirstsecondzfirst second
zfirst
)         z1 2 3

)	argumentsr>   )r?   assertRaises
SystemExitr   rA   errprintr@   getvalue)r   rC   argsr>   stderrs        r   test_errprintTestErrPrint.test_errprintf   s     x "23Y	"	"J	
 $ND@&&z2(*f ))40 +$$V__%6B 3 A@ $ +* 32 A@s;   B> B-B	(B-B>
B*&B--
B;7B>>
C	r6   N)r1   r2   r3   r4   rW   r5   r6   r   r   rG   rG   c   s    Cr   rG   c                       \ rS rSrS rSrg)TestNannyNagw   c                 z   [         R                  " SSS5      SSSS.4[         R                  " SSS5      SSSS.4/nU H  u  p#UR                  5       nUR                  5       nUR	                  5       nU R                  XCS   S	9   U R                  US   U5        S S S 5        U R                  XSS
   S9   U R                  US
   U5        S S S 5        U R                  XcS   S9   U R                  US   U5        S S S 5        M     g ! , (       d  f       Ns= f! , (       d  f       NT= f! , (       d  f       M  = f)Nr   foobar)linenomsgline   testmsgtestliner_   )line_numberr>   r`   )r`   r>   ra   )ra   r>   )rA   NannyNag
get_linenoget_msgget_liner?   r@   )r   rC   nannyr>   re   r`   ra   s          r   test_all_methodsTestNannyNag.test_all_methodsx   s2    !!!UE2UE:
 !!!Y
;Y
C	
  %OE**,K--/C>>#D'82D     (!3[A #@  %#6 A462BC  &!148 DC  %  A@CCs$   D	6D&D+	
D	
D(	+
D:	r6   N)r1   r2   r3   r4   rk   r5   r6   r   r   rZ   rZ   w   s    9r   rZ   c                   Z    \ rS rSrS rSS jrS rS rS rS r	S r
S	 rS
 rS rS rSrg)	TestCheck   c                 n    U R                  [        [        S[        R                  5        S[        l        g )Nverboser   )
addCleanupsetattrrA   rq   )r   s    r   setUpTestCheck.setUp   s"    9h6F6FGr   c                 @   [        5        n[        5        n[        R                  " U5        S S S 5        S S S 5        U R	                  WR                  5       U5        U R	                  WR                  5       U5        g ! , (       d  f       NW= f! , (       d  f       N`= fr   )r   r   rA   checkr@   rT   )r   dir_or_fileouterrstdoutrV   s         r   verify_tabnanny_checkTestCheck.verify_tabnanny_check   se     &/*;vNN;' +<*C0*C0 +<*;s!   BA>B>
B	B
Bc                 ~    [        [        S   5       nU R                  U5        S S S 5        g ! , (       d  f       g = fNr   r   SOURCE_CODESr|   r   r&   s     r   test_correct_fileTestCheck.test_correct_file   s+    \,78I&&y1 988   .
<c           
         [         R                  " 5        nU< S3/n[        [        S   US9n[        [        S   US9nU oT nXV4 H  nUR	                  U< S35        M     S[
        l        [        5        n[        5        n	[
        R                  " U5        S S S 5        S S S 5        WR                  5       nU H,  n
U R                  U
S9   U R                  X5        S S S 5        M.     U R                  W	R                  5       S5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       M  = f! , (       d  f       NS= f! , (       d  f       N\= f! , (       d  f       g = f)Nz: listing directory
r   r   z: Clean bill of health.
rL   )ra   r0   )r"   TemporaryDirectoryr   r   appendrA   rq   r   r   rw   rT   r?   assertInr@   )r   tmp_dirlinesfile1file2
file1_path
file2_pathr&   r{   rV   ra   s              r   test_correct_directory_verbose(TestCheck.test_correct_directory_verbose   s,    ((*g{"78:E#L$>'RE#L$>'RE*ez",!9ILLI=0I!JK ": $% $&&/2CvNN7+ 3D&*!D40d3 10 "   !2B7 ',	 +* 3D2C&& 10 ',e	 +*s   ,E<E+5E9D7	D&D7	#,EE!,EE+E<&
D40D7	7
EE
EE
E($E++
E9	5E<<
F
c                     [         R                  " 5        n[        [        S   US9   U R	                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   )r"   r   r   r   r|   )r   r   s     r   test_correct_directory TestCheck.test_correct_directory   sK    ((*g l!;wO**73 P +*OO +*s!   AAA
A	A
A*c                     [        [        S   5       nSnU< SU 3nU R                  [        5         U R	                  XS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   Iunindent does not match any outer indentation level (<tokenize>, line 3)
: Indentation Error: rz   r   r   rQ   rR   r|   r   r&   rz   s      r   test_when_wrong_indented"TestCheck.test_when_wrong_indented   sh    \*:;<	*CM!6se<C"":.**9*> /	 =< /.	 =<"    A%AA%
A"	A%%
A3c                     [        [        S   5       nSnU< SU 3nU R                  [        5         U R	                  XS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr
   z(('EOF in multi-line statement', (7, 0))
z: Token Error: r   r   r   s      r   test_when_tokenize_tokenerror'TestCheck.test_when_tokenize_tokenerror   sg    \*ABCy=CM6C"":.**9*> / DC /. DCr   c                     [        [        S   5       nU< S3nUS-  nUS-  nS[        l        U R	                  XS9  S S S 5        g ! , (       d  f       g = f)Nr   z': *** Line 3: trouble in tab city! ***
z#offending line: '\tprint("world")'
z3inconsistent use of tabs and spaces in indentation
rL   ry   )r   r   rA   rq   r|   r   r&   ry   s      r    test_when_nannynag_error_verbose*TestCheck.test_when_nannynag_error_verbose   s\    
 \*<=>)M!IJC<<CIIC H&&y&: ?>>s   +A
Ac                     [        [        S   5       nU S3nU R                  XS9  S S S 5        g ! , (       d  f       g = f)Nr   z 3 '\tprint("world")'
r   r   r   s      r   test_when_nannynag_error"TestCheck.test_when_nannynag_error   s<    \*<=>)K9:C&&y&: ?>>s   1
?c                    SnU< S[         R                   S[        R                  " [         R                  5       SU< S3nU R	                  [
        5         U R                  XS9  S S S 5        g ! , (       d  f       g = f)Nz
no_file.pyz: I/O Error: [Errno z] z: rO   r   )errnoENOENTosstrerrorrQ   rR   r|   )r   pathrz   s      r   test_when_no_fileTestCheck.test_when_no_file   sf    -ell^2U\\*+2dXR9z*&&t&5 +**s   A11
A?c           	         [         R                  " 5        n[        [        S   US9n[        [        S   US9nU oC nSnU< SU 3nU R	                  [
        5         U R                  XS9  S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Nr   r   r   r   r   r   )r"   r   r   r   rQ   rR   r|   )r   r   
error_file	code_filee_filec_filerz   s          r   test_errored_directory TestCheck.test_errored_directory   s    ((*g(-.'J (\*gI vyF6
"7u=&&z2..w.@ 3	 (1 +* 32	 (1y +*sQ   %CB0 BB	-B5B0=C
BB
B-)B00
B>	:C
Cr6   N)r0   r0   )r1   r2   r3   r4   rt   r|   r   r   r   r   r   r   r   r   r   r5   r6   r   r   rn   rn      s:    12
804??;;6Ar   rn   c                   J    \ rS rSr\R
                  " S5      S 5       rS rSrg)TestProcessTokensi  ztabnanny.NannyNagc                 D   [        [        S   5       n[        U5       n[        R                  " [
        R                  " UR                  5      5        S S S 5        U R                  UR                  5        S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = fr   )
r   r   openrA   process_tokenstokenizegenerate_tokensreadlineassertFalsecalled)r   MockNannyNagr&   r'   s       r   test_with_correct_code(TestProcessTokens.test_with_correct_code	  si     \,78IiA''(@(@(LM !\001 98  98s"   B5B #B 
B	
B
Bc           
         S H  nU R                  US9   [        [        U   5       n[        U5       n[        R
                  " UR                  5      nU R                  [        R                  5         [        R                  " U5        S S S 5        S S S 5        S S S 5        S S S 5        M     g ! , (       d  f       N+= f! , (       d  f       N4= f! , (       d  f       N== f! , (       d  f       M  = f)N)r   r   )key)r?   r   r   r   r   r   r   rQ   rA   rf   r   )r   r   r&   r'   tokenss        r   test_with_errored_codes_samples1TestProcessTokens.test_with_errored_codes_samples  s     BC#&$\#%679iA!)!9!9!**!E!..x/@/@A$33F; B ) 8 '& B
 BA ) 87 '&sR   C#CA C	4B0C	CC#0
B>:C	
CC
C C##
C2	r6   N)	r1   r2   r3   r4   r   patchr   r   r5   r6   r   r   r   r     s%     
ZZ#$2 %2<r   r   c                   L    \ rS rSrSSSSS.S jrS rS rS rS	 rS
 r	S r
Srg)TestCommandLinei$  r0   F)r{   rV   partialexpect_failurec                   U(       a  [         R                  " SS/UQ76 u  pgnO[         R                  " SS/UQ76 u  pgn[        R                  " U5      n[        R                  " U5      nU(       a`  X4X(44 HU  u  pU
R                  5       nU	R                  5        H,  nU R                  XS9   U R                  X5        S S S 5        M.     MW     g U R                  UR                  5       UR                  5       5        U R                  UR                  5       UR                  5       5        g ! , (       d  f       M  = f)Nz-mrA   )stdoutput)	r   assert_python_failureassert_python_okr   fsdecode
splitlinesr?   r   assertListEqual)r   r{   rV   r   r   rU   _ry   rz   r   r   _output_stds                r   validate_cmdTestCommandLine.validate_cmd'  s    '==dJVQUVKAC'88zQDQKAC kk#kk#!'}= ++-NN,D$?d4 @? -  >   !163D3D3FG  !163D3D3FG	 @?s   /D//
D>c                     [        [        S   5       nU< S3nUS-  nU R                  XSS9  S S S 5        g ! , (       d  f       g = f)Nr   r   zFunindent does not match any outer indentation level (<string>, line 3)TrV   r   r   r   r   )r   r&   rV   s      r   test_with_errored_file&TestCommandLine.test_with_errored_file;  sM    \*:;<	"%:;F - .FitL	 =<<s	   8
Ac                 ~    [        [        S   5       nU R                  U5        S S S 5        g ! , (       d  f       g = fr   r   r   s     r   test_with_error_free_file)TestCommandLine.test_with_error_free_fileC  s+    \,78Ii( 988r   c                 F    [        S5      nSU S3nU R                  USS9  g )Nztabnanny.pyzUsage: z [-v] file_or_directory ...Tr   )r   r   )r   r   rV   s      r   test_command_usage"TestCommandLine.test_command_usageH  s.    &4& ;<=r   c                     [        [        S   5       nU S3nU R                  SXS9  S S S 5        g ! , (       d  f       g = f)Nr   rO   z-q)r{   r   )r   r&   r{   s      r   test_quiet_flagTestCommandLine.test_quiet_flagN  s=    \*<=>)!{"%FdI= ?>>s	   2
A c                     [        [        S   5       n[        R                  " S5      R	                  5       nU R                  SXSS9  S S S 5        g ! , (       d  f       g = f)Nr   "offending line: '\tprint("world")'z-vTr{   r   r   r   textwrapdedentstripr   r   r   r{   s      r   test_verbose_mode!TestCommandLine.test_verbose_modeT  sP    \*<=>$__7eg  dDF	 ?>>   6A
A c                     [        [        S   5       n[        R                  " S5      R	                  5       nU R                  SXSS9  S S S 5        g ! , (       d  f       g = f)Nr   r   z-vvTr   r   r   s      r   test_double_verbose_mode(TestCommandLine.test_double_verbose_mode\  sP    \*<=>$__7eg  eT$G	 ?>>r   r6   N)r1   r2   r3   r4   r   r   r   r   r   r   r   r5   r6   r   r   r   r   $  s5     *,BV[ H(M)
>>GHr   r   )unittestr   r   r   r   rA   r   r"   r   test.supportr   r   r   r   test.support.os_helperr	   r   r   r8   rG   rZ   rn   r   r   r6   r   r   <module>r      s    $  	    $ $ )
		%	%	%	!	'K*Z &M( M"C8 C(98 96qA qAh< <<>Hh >Hr   