o
    ?n0j_                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	 G dd de
Zedd	 Zed
d ZG dd de	jZG dd de	jZdS )zTests for yapf.__init__.main.    N)contextmanager)StringIO)yapf_test_helperc                   @   s8   e Zd ZdZG dd deZdd Zdd Zdd	 Zd
S )IOzIO is a thin wrapper around StringIO.

  This is strictly to wrap the Python 3 StringIO object so that it can supply a
  "buffer" attribute.
  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )z	IO.Bufferc                 C   s   t  | _d S N)r   	string_ioself r
   Z/home/wildlama/miniconda3/envs/lam_a2e/lib/python3.10/site-packages/yapftests/main_test.py__init__$   s   zIO.Buffer.__init__c                 C   s$   t |tr
t|d}| j| d S )Nzutf-8)
isinstancebytesstrr   writer	   sr
   r
   r   r   '   s   

zIO.Buffer.writec                 C   
   | j  S r   )r   getvaluer   r
   r
   r   r   ,      
zIO.Buffer.getvalueN)__name__
__module____qualname__r   r   r   r
   r
   r
   r   Buffer"   s    r   c                 C   s   |   | _d S r   )r   bufferr   r
   r
   r   r   /   s   zIO.__init__c                 C   s   | j | d S r   )r   r   r   r
   r
   r   r   2   s   zIO.writec                 C   r   r   )r   r   r   r
   r
   r   r   5   r   zIO.getvalueN)	r   r   r   __doc__objectr   r   r   r   r
   r
   r
   r   r      s    r   c               	   c   s`    t  t  } }tjtj}}z| |t_t_tjtjfV  W ||t_t_d S ||t_t_w r   )r   sysstdoutstderr)Znew_outnew_errZold_outZold_errr
   r
   r   captured_output9   s   "r!   c                 #   sD     fdd}| fdd}zt j}|t _dV  W |t _dS |t _w )z6Monkey patch code as though it were coming from stdin.c                  3   s       D ]} | V  qt r   )
splitlinesEOFError)linecoder
   r   linesH   s   zpatched_input.<locals>.linesc                 S   s   t | S r   )next)r'   r
   r
   r   patch_raw_inputM   s   z&patched_input.<locals>.patch_raw_inputN)yapf
_raw_input)r&   r'   r)   Zorig_raw_importr
   r%   r   patched_inputD   s   r,   c                   @   s   e Zd Zdd ZdS )RunMainTestc              	   C   s   d}ddgt _t 4\}}| t t  W d   n1 s!w   Y  | | d | | | W d   dS 1 sAw   Y  dS )z1run_main should handle YapfError and sys.exit(1).z5yapf: input filenames did not match any python files
r*   foo.cN )	r   argvr!   ZassertRaises
SystemExitr*   run_mainassertEqualr   )r	   Zexpected_messageouterrr
   r
   r   testShouldHandleYapfErrorZ   s   

"z%RunMainTest.testShouldHandleYapfErrorN)r   r   r   r6   r
   r
   r
   r   r-   X   s    r-   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )MainTestc                 C   sD   |  tjjd tddg W d    d S 1 sw   Y  d S )Nzdid not match any python filesr*   r.   )assertRaisesRegexr*   errors	YapfErrormainr   r
   r
   r   testNoPythonFilesMatchedg   s
   
"z!MainTest.testNoPythonFilesMatchedc              	   C   s   d}t |9 t \}}tg }| |d | | | W d    n1 s*w   Y  W d    d S W d    d S 1 sBw   Y  d S )Nza = 1
b = 2
r   r,   r!   r*   r;   r3   r   )r	   r&   r4   _retr
   r
   r   testEchoInputl   s   

"zMainTest.testEchoInputc              	   C   s   d}d}t |; t \}}tddg}| |d | | | W d    n1 s.w   Y  W d    d S W d    d S 1 sFw   Y  d S )Nzdef f(a = 1

):
    return 2*a
zdef f(a=1):
  return 2 * a
-z--style=yapfr   r=   )r	   r&   Z	yapf_coder4   r>   r?   r
   r
   r   testEchoInputWithStylet   s   
"zMainTest.testEchoInputWithStylec              
   C   s   d}t |C t '\}}| tjjd tg  W d    n1 s%w   Y  W d    n1 s4w   Y  W d    d S W d    d S 1 sLw   Y  d S )Nz  a = 1
zunexpected indent)r,   r!   r8   r*   r9   r:   r;   )r	   Z
bad_syntaxr>   r
   r
   r   testEchoBadInput}   s   
"zMainTest.testEchoBadInputc                 C   sj   t  (\}}tg d}| |d | }| d| | d| W d    d S 1 s.w   Y  d S )N)rA   z--style-helpz--style=pep8r   zindent_width=4z8The number of spaces required before a trailing comment.)r!   r*   r;   r3   r   ZassertIn)r	   r4   r>   r?   Zhelp_messager
   r
   r   testHelp   s   "zMainTest.testHelpN)r   r   r   r<   r@   rB   rC   rD   r
   r
   r
   r   r7   e   s    	r7   )r   r   Zunittest
contextlibr   ior   r*   Z	yapftestsr   r   r   r!   r,   ZYAPFTestr-   r7   r
   r
   r
   r   <module>   s   


