a
    
d_                     @   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
   \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   s
   | j  S r   )r   getvaluer   r
   r
   r   r   ,   s    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   s
   | j  S r   )r   r   r   r
   r
   r   r   5   s    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_n|| t_t_0 d S r   )r   sysstdoutstderr)Znew_outZ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 _n|t _0 dS )z6Monkey patch code as though it were coming from stdin.c                  3   s      D ]
} | V  qt d S 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 f\}}| t t  W d   n1 sB0    Y  | | d | | | W d   n1 s0    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   assertRaises
SystemExitr'   run_mainassertEqualr   )r	   Zexpected_messageouterrr
   r
   r   testShouldHandleYapfErrorZ   s    
&z%RunMainTest.testShouldHandleYapfErrorN)r   r   r   r4   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   sB   |  tjjd tddg W d    n1 s40    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 |` t :\}}tg }| |d | | | W d    n1 sT0    Y  W d    n1 sr0    Y  d S )Nza = 1
b = 2
r   r)   r   r'   r9   r1   r   )r	   r#   r2   _retr
   r
   r   testEchoInputl   s    

zMainTest.testEchoInputc              	   C   s   d}d}t |d t >\}}tddg}| |d | | | W d    n1 s\0    Y  W d    n1 sz0    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_coder2   r<   r=   r
   r
   r   testEchoInputWithStylet   s    
zMainTest.testEchoInputWithStylec              
   C   s   d}t |t t N\}}| tjjd tg  W d    n1 sJ0    Y  W d    n1 sh0    Y  W d    n1 s0    Y  d S )Nz  a = 1
zunexpected indent)r)   r   r6   r'   r7   r8   r9   )r	   Z
bad_syntaxr<   r
   r
   r   testEchoBadInput}   s
    
zMainTest.testEchoBadInputc                 C   sh   t  N\}}tg d}| |d | }| d| | d| W d    n1 sZ0    Y  d S )N)r?   z--style-helpz--style=pep8r   zindent_width=4z8The number of spaces required before a trailing comment.)r   r'   r9   r1   r   ZassertIn)r	   r2   r<   r=   Zhelp_messager
   r
   r   testHelp   s    zMainTest.testHelpN)r   r   r   r:   r>   r@   rA   rB   r
   r
   r
   r   r5   e   s
   	r5   )r   r   Zunittest
contextlibr   ior   r'   Z	yapftestsr   r   r   r   r)   ZYAPFTestr*   r5   r
   r
   r
   r   <module>   s   


