o
    KXîhÕ!  ã                   @   sŽ   	 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mZ eƒ  G dd„ dejƒZedkrEe ¡  dS dS )	é    N)Úsupport)Ú	os_helper)Úassert_python_ok)Ú
scriptsdirÚskip_if_missingc                   @   sr   e Zd Zej ed¡Zdd„ Zdd„ Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚPindentTestsz
pindent.pyc              	   C   sz   t |ƒ/}t |ƒ}|  | ¡ | ¡ ¡ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S ©N)ÚopenÚassertEqualÚ	readlines)ÚselfZfn1Zfn2Úf1Úf2© r   úF/opt/python-3.10.19/usr/lib/python3.10/test/test_tools/test_pindent.pyÚassertFileEqual   s   PÿzPindentTests.assertFileEqualc                 G   s^   t jtj| jf| t jt jdd}| |¡\}}W d   ƒ n1 s#w   Y  |  |¡ |S )NT)ÚstdinÚstdoutÚuniversal_newlines)Ú
subprocessÚPopenÚsysÚ
executableÚscriptÚPIPEÚcommunicateZassertIsNone)r   ÚsourceÚargsÚprocÚoutÚerrr   r   r   Úpindent   s   ýü
zPindentTests.pindentc                 C   s   d  dd„ | ¡ D ƒ¡d S )NÚ
c                 s   s    | ]}|  ¡ V  qd S r   )Úlstrip)Ú.0Úliner   r   r   Ú	<genexpr>"   s   € z+PindentTests.lstriplines.<locals>.<genexpr>)ÚjoinÚ
splitlines)r   Údatar   r   r   Úlstriplines!   s   zPindentTests.lstriplinesc              	   C   s"  d | _ t ¡ ~}tj |d¡}t| jƒ}| ¡ }W d   ƒ n1 s$w   Y  t|dƒ}| 	|¡ W d   ƒ n1 s>w   Y  t
| jd|ƒ\}}}|  |d¡ |  |d¡ |d }|  tj |¡¡ t|ƒ}|  | ¡ |¡ W d   ƒ n1 s}w   Y  t|ƒ}| ¡ }	W d   ƒ n1 s•w   Y  t|	ddƒ |  |  |	d¡|¡ |  |  |d¡|	¡ t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ}|  | ¡ |	¡ W d   ƒ n1 sáw   Y  t|ƒ}|  | ¡ |¡ W d   ƒ n1 sýw   Y  |  |¡}
t|dƒ}| 	|
¡ W d   ƒ n	1 sw   Y  t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ}|  | ¡ |
¡ W d   ƒ n	1 sPw   Y  t|ƒ}| ¡ }W d   ƒ n	1 siw   Y  t|ddƒ |  |  |
d¡|¡ W d   ƒ d S 1 sŠw   Y  d S )	Nz_test.pyÚwú-dó    ú~Úexecú-cú-r)ZmaxDiffr   Ztemp_dirÚosÚpathr'   r	   r   ÚreadÚwriter   r
   Z
assertTrueÚexistsÚcompiler!   r*   )r   Z	directoryZ	data_pathÚfÚclosedÚrcr   r    ZbackupÚcleanÚbrokenZindentedr   r   r   Útest_selftest$   s`   
ÿÿ
ÿ

ÿ
ÿ
ÿ
ÿ
ÿ

ÿ$ÙzPindentTests.test_selftestc              	   C   sP   |   |  |d¡|¡ |   |  |d¡|¡ |  |¡}|   |  |dddd¡|¡ d S )Nr0   r,   r1   ú-eú-sÚ4)r
   r!   r*   ©r   r;   r9   r<   r   r   r   Úpindent_testO   s   
zPindentTests.pindent_testc                 C   ó$   t  d¡}t  d¡}|  ||¡ d S )Na:              if a:
                pass

            if a:
                pass
            else:
                pass

            if a:
                pass
            elif:
                pass
            else:
                pass

            while a:
                break

            while a:
                break
            else:
                pass

            for i in a:
                break

            for i in a:
                break
            else:
                pass

            try:
                pass
            finally:
                pass

            try:
                pass
            except TypeError:
                pass
            except ValueError:
                pass
            else:
                pass

            try:
                pass
            except TypeError:
                pass
            except ValueError:
                pass
            finally:
                pass

            with a:
                pass

            class A:
                pass

            def f():
                pass
            a`              if a:
                pass
            # end if

            if a:
                pass
            else:
                pass
            # end if

            if a:
                pass
            elif:
                pass
            else:
                pass
            # end if

            while a:
                break
            # end while

            while a:
                break
            else:
                pass
            # end while

            for i in a:
                break
            # end for

            for i in a:
                break
            else:
                pass
            # end for

            try:
                pass
            finally:
                pass
            # end try

            try:
                pass
            except TypeError:
                pass
            except ValueError:
                pass
            else:
                pass
            # end try

            try:
                pass
            except TypeError:
                pass
            except ValueError:
                pass
            finally:
                pass
            # end try

            with a:
                pass
            # end with

            class A:
                pass
            # end class A

            def f():
                pass
            # end def f
            ©ÚtextwrapÚdedentrB   ©r   r;   r9   r   r   r   Útest_statementsU   s   

AMzPindentTests.test_statementsc                 C   rC   )Nz÷            def foobar(a, b):
                if a == b:
                    a = a+1
                elif a < b:
                    b = b-1
                    if b > a: a = a-1
                else:
                    print 'oops!'
            aJ              def foobar(a, b):
                if a == b:
                    a = a+1
                elif a < b:
                    b = b-1
                    if b > a: a = a-1
                    # end if
                else:
                    print 'oops!'
                # end if
            # end def foobar
            rD   rG   r   r   r   Útest_multilevelæ   s   


zPindentTests.test_multilevelc              	   C   s¾   t  d¡}t  d¡}|  |  |d¡|¡ |  |  |d¡|¡ |  |¡}|  |  |dddd¡|¡ t  d	¡}t  d
¡}|  |  |d¡|¡ |  |  |d¡|¡ |  |¡}|  |  |d¡|¡ d S )Nz\            if a:
                     if b:
                              pass
            z            if a:
                     if b:
                              pass
                     # end if
            # end if
            r0   r,   r1   r>   r?   Ú9zD            if a:
            	if b:
            		pass
            zo            if a:
            	if b:
            		pass
            	# end if
            # end if
            )rE   rF   r
   r!   r*   rA   r   r   r   Útest_preserve_indents   s   





z"PindentTests.test_preserve_indentsc                 C   s@   t  d¡}t  d¡}|  |  |d¡|¡ |  |  |d¡|¡ d S )Nzƒ            class\
            \
             A:
               def            \
            f:
                  pass
            z¸            class\
            \
             A:
               def            \
            f:
                  pass
               # end def f
            # end class A
            r0   r,   )rE   rF   r
   r!   rG   r   r   r   Útest_escaped_newline"  s   

	z!PindentTests.test_escaped_newlinec                 C   rC   )Nz4            if a:

                pass
            zI            if a:

                pass
            # end if
            rD   rG   r   r   r   Útest_empty_line:  s   

zPindentTests.test_empty_linec                 C   rC   )Nz#            if a: pass
            z8            if a: pass
            # end if
            rD   rG   r   r   r   Útest_onelineH  s   

zPindentTests.test_onelineN)Ú__name__Ú
__module__Ú__qualname__r2   r3   r'   r   r   r   r!   r*   r=   rB   rH   rI   rK   rL   rM   rN   r   r   r   r   r      s    	+ "r   Ú__main__)r2   r   Zunittestr   rE   Útestr   Ztest.supportr   Ztest.support.script_helperr   Ztest.test_toolsr   r   ZTestCaser   rO   Úmainr   r   r   r   Ú<module>   s"      Dÿ