B
    v9a°!  ã               @   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   s@   t |ƒ.}t |ƒ}|  | ¡ | ¡ ¡ W d Q R X W d Q R X d S )N)ÚopenÚassertEqualÚ	readlines)ÚselfZfn1Zfn2Úf1Úf2© r   ú"/usr/lib/python3.7/test_pindent.pyÚassertFileEqual   s    zPindentTests.assertFileEqualc          	   G   sJ   t jtj| jf| t jt jdd}| |¡\}}W d Q R X |  |¡ |S )NT)ÚstdinÚstdoutZuniversal_newlines)Ú
subprocessÚPopenÚsysÚ
executableÚscriptÚPIPEZ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 )N)Úlstrip)Ú.0Úliner   r   r   ú	<genexpr>!   s    z+PindentTests.lstriplines.<locals>.<genexpr>)ÚjoinÚ
splitlines)r
   Údatar   r   r   Úlstriplines    s    zPindentTests.lstriplinesc          
   C   sP  d | _ t ¡ 6}tj |d¡}t| jƒ}| ¡ }W d Q R X t|dƒ}| 	|¡ W d Q R X t
| jd|ƒ\}}}|  |d¡ |  |d¡ |d }|  tj |¡¡ t|ƒ}|  | ¡ |¡ W d Q R X t|ƒ}| ¡ }	W d Q R X t|	ddƒ |  |  |	d¡|¡ |  |  |d¡|	¡ t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ}|  | ¡ |	¡ W d Q R X t|ƒ}|  | ¡ |¡ W d Q R X |  |¡}
t|dƒ}| 	|
¡ W d Q R X t
| jd|ƒ\}}}|  |d¡ |  |d¡ t|ƒ}|  | ¡ |
¡ W d Q R X t|ƒ}| ¡ }W d Q R X t|ddƒ |  |  |
d¡|¡ W d Q R X d S )	Nz_test.pyÚwz-dó    ú~Úexecz-cz-r)ZmaxDiffr   Ztemp_dirÚosÚpathr#   r   r   ÚreadÚwriter   r   Z
assertTrueÚexistsÚcompiler   r&   )r
   Z	directoryZ	data_pathÚfÚclosedZrcr   r   ZbackupÚcleanÚbrokenZindentedr   r   r   Útest_selftest#   sL    






zPindentTests.test_selftestc          	   C   sP   |   |  |d¡|¡ |   |  |d¡|¡ |  |¡}|   |  |dddd¡|¡ d S )Nz-cz-dz-rz-ez-sÚ4)r   r   r&   )r
   r3   r2   r4   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Údedentr7   )r
   r3   r2   r   r   r   Útest_statementsT   s
    ?Lz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
            )r8   r9   r7   )r
   r3   r2   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
            z-cz-dz-rz-ez-sÚ9zD            if a:
            	if b:
            		pass
            zo            if a:
            	if b:
            		pass
            	# end if
            # end if
            )r8   r9   r   r   r&   )r
   r3   r2   r4   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
            z-cz-d)r8   r9   r   r   )r
   r3   r2   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
            )r8   r9   r7   )r
   r3   r2   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
            )r8   r9   r7   )r
   r3   r2   r   r   r   Útest_onelineG  s
    zPindentTests.test_onelineN)Ú__name__Ú
__module__Ú__qualname__r+   r,   r#   r   r   r   r   r&   r5   r7   r:   r;   r=   r>   r?   r@   r   r   r   r   r      s   	+ "r   Ú__main__)r+   r   Zunittestr   r8   Ztestr   Ztest.support.script_helperr   Ztest.test_toolsr   r   ZTestCaser   rA   Úmainr   r   r   r   Ú<module>   s     D