a
    åze°!  ã                   @   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
mZ eƒ  G dd„ dejƒZedkrxe ¡  dS )é    N)Úsupport)Ú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   sh   t |ƒL}t |ƒ$}|  | ¡ | ¡ ¡ W d   ƒ n1 s<0    Y  W d   ƒ n1 sZ0    Y  d S ©N)ÚopenÚassertEqualÚ	readlines)ÚselfZfn1Zfn2Úf1Úf2© r   ú2/usr/lib/python3.9/test/test_tools/test_pindent.pyÚassertFileEqual   s    zPindentTests.assertFileEqualc                 G   s^   t jtj| jf| t jt jdd}| |¡\}}W d   ƒ n1 sF0    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>!   ó    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 sH0    Y  t|dƒ}| 	|¡ W d   ƒ n1 s|0    Y  t
| jd|ƒ\}}}|  |d¡ |  |d¡ |d }|  tj |¡¡ t|ƒ }|  | ¡ |¡ W d   ƒ n1 sú0    Y  t|ƒ}| ¡ }	W d   ƒ n1 s,0    Y  t|	ddƒ |  |  |	d¡|¡ |  |  |d¡|	¡ t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ }|  | ¡ |	¡ W d   ƒ n1 sÆ0    Y  t|ƒ }|  | ¡ |¡ W d   ƒ n1 s 0    Y  |  |¡}
t|dƒ}| 	|
¡ W d   ƒ n1 s@0    Y  t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ }|  | ¡ |
¡ W d   ƒ n1 s¦0    Y  t|ƒ}| ¡ }W d   ƒ n1 sØ0    Y  t|ddƒ |  |  |
d¡|¡ W d   ƒ n1 s0    Y  d S )	Nz_test.pyÚwú-dr&   ú~Ú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#   sL    &(
.
(
0
0
*
0
(zPindentTests.test_selftestc              	   C   sP   |   |  |d¡|¡ |   |  |d¡|¡ |  |¡}|   |  |dddd¡|¡ d S )Nr/   r,   r0   ú-eú-sÚ4)r	   r    r*   ©r   r:   r8   r;   r   r   r   Úpindent_testN   s    
zPindentTests.pindent_testc                 C   s$   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ÚdedentrA   ©r   r:   r8   r   r   r   Útest_statementsT   s    
A
MzPindentTests.test_statementsc                 C   s$   t  d¡}t  d¡}|  ||¡ d S )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
            rB   rE   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
            r/   r,   r0   r=   r>   Ú9zD            if a:
            	if b:
            		pass
            zo            if a:
            	if b:
            		pass
            	# end if
            # end if
            )rC   rD   r	   r    r*   r@   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
            r/   r,   )rC   rD   r	   r    rE   r   r   r   Útest_escaped_newline!  s    
	
z!PindentTests.test_escaped_newlinec                 C   s$   t  d¡}t  d¡}|  ||¡ d S )Nz4            if a:

                pass
            zI            if a:

                pass
            # end if
            rB   rE   r   r   r   Útest_empty_line9  s    

zPindentTests.test_empty_linec                 C   s$   t  d¡}t  d¡}|  ||¡ d S )Nz#            if a: pass
            z8            if a: pass
            # end if
            rB   rE   r   r   r   Útest_onelineG  s    

zPindentTests.test_onelineN)Ú__name__Ú
__module__Ú__qualname__r1   r2   r'   r   r   r   r    r*   r<   rA   rF   rG   rI   rJ   rK   rL   r   r   r   r   r      s   	+ "r   Ú__main__)r1   r   Zunittestr   rC   Útestr   Ztest.support.script_helperr   Ztest.test_toolsr   r   ZTestCaser   rM   Úmainr   r   r   r   Ú<module>   s     D