o
    JAf4                     @   s   d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ej
ZG dd dejZG d	d
 d
ejZdd ZG dd dejZG dd dejZedkrUejdd dS dS )zTest editor, coverage 35%.    )editorN)
namedtuple)requires)Tkc                   @   ,   e Zd Zedd Zedd Zdd ZdS )EditorWindowTestc                 C   s   t d t | _| j  d S )Ngui)r   r   rootwithdrawcls r   4/usr/lib/python3.10/idlelib/idle_test/test_editor.py
setUpClass   s   zEditorWindowTest.setUpClassc                 C   s>   | j   | j jddD ]}| j | q| j   | ` d S NZafterinfo)r	   update_idletaskstkcallafter_canceldestroyr   idr   r   r   tearDownClass   s
   

zEditorWindowTest.tearDownClassc                 C   s(   t | jd}| |j| j |  d S )Nr	   )Editorr	   assertEqual_close)selfer   r   r   	test_init   s   zEditorWindowTest.test_initN)__name__
__module____qualname__classmethodr   r   r    r   r   r   r   r      s    

r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestGetLineIndentc              
   C   s\   dD ])}dD ]$}| j ||d | tj||dd W d    n1 s%w   Y  qqd S )N)               ) 
)linetabwidthr.   r   r   subTestr   r   Zget_line_indent)r   r.   r-   r   r   r   test_empty_lines#   s   z"TestGetLineIndent.test_empty_linesc              	   C   X   d}|D ]%\}}| j |d | tj|dd| W d    n1 s$w   Y  qd S )N)z	no spacesr0   )z    space test)r(   r(   )		tab test)r&   r(   )		double tabs test)r'   r*   )z    	mixed test   r*   )z  	  mixed test)r9   r)   )z	    mixed testr8   )  	mixed test)   r(   ) 	 mixed test)r;   r9   )	  mixed test)r;   r)   z
newline testr0   r-   r(   r/   r1   r   testsr-   expectedr   r   r   test_tabwidth_4,      z!TestGetLineIndent.test_tabwidth_4c              	   C   r4   )N)r5   )z        space test)r*   r*   )r6   )r&   r*   )r7   )r'      )z        	mixed test	   rE   )z      	  mixed test)rG   
   )z	        mixed testrF   )r:   )r;   r*   )r<   )r;   rG   )r=   )r;   rH   r>   r?   r*   r/   r1   r@   r   r   r   test_tabwidth_8E   rD   z!TestGetLineIndent.test_tabwidth_8N)r!   r"   r#   r3   rC   rI   r   r   r   r   r%   "   s    	r%   c                 C   s$   |  dd | d| |   d S )N1.0end)deleteinsertupdate)textstringr   r   r   rM   _   s   rM   c                   @   r   )IndentAndNewlineTestc                 C   s<   t d t | _| j  t| jd| _d| j_d| j_d S )Nr   r   r'   )r   r   r	   r
   r   windowZindentwidthr.   r   r   r   r   r   g   s   
zIndentAndNewlineTest.setUpClassc                 C   L   | j   | ` | j  | jjddD ]}| j| q| j  | `d S r   rR   r   r	   r   r   r   r   r   r   r   r   r   r   p      


z"IndentAndNewlineTest.tearDownClassc           	      C   s>  | j }| j}|j}|j}|j}tdg d}|dddd|ddd	d
|ddd	d|dddd|dddd|dddd|dddd|dddd|ddddf	}|D ]4}| j|jd # t||j |	d!|j
 |d d" ||d#d$|j W d    n1 sw   Y  qPt|d% |d&d'd |d  ||d#d$d( d S ))NZTests)labelrO   rB   markz"Empty line inserts with no indent.z  
  def __init__(self):z
  
  def __init__(self):
z1.endz+Inside bracket before space, deletes space.z  def f1(self, a, b):z  def f1(self,
         a, b):
z1.14z*Inside bracket after space, deletes space.z1.15z(Inside string with one line - no indent.z  """Docstring."""z  """Docstring.
"""
z&Inside string with more than one line.z%  """Docstring.
  Docstring Line 2"""z)  """Docstring.
  Docstring Line 2
  """
z2.18zBackslash with one line.za =\za =\
  
z"Backslash with more than one line.za =\
          multiline\z%a =\
          multiline\
          
z2.endz Block opener - indents +1 level.z  def f1(self):
    passz  def f1(self):
    
    pass
z Block closer - dedents -1 level.z  def f1(self):
    pass
  
)rV   rM   )eventrJ   rK   z&  def f1(self, a, b):
    return a + bZselz1.17z-  def f1(self, a,
         
    return a + b
)r   rR   rO   getZnewline_and_indent_eventr   r2   rV   rM   Zmark_setrW   rB   Ztag_add)	r   eqwrO   rY   nlZTestInforA   testr   r   r   test_indent_and_newline_eventz   s   &

z2IndentAndNewlineTest.test_indent_and_newline_eventN)r!   r"   r#   r$   r   r   r^   r   r   r   r   rQ   e   s    

	rQ   c                   @   s:   e Zd Zedd Zedd ZG dd dZdd Zd	S )
	RMenuTestc                 C   s,   t d t | _| j  t| jd| _d S )Nr   r   )r   r   r	   r
   r   rR   r   r   r   r   r      s   
zRMenuTest.setUpClassc                 C   rS   r   rT   r   r   r   r   r      rU   zRMenuTest.tearDownClassc                   @   s   e Zd Zdd ZdS )zRMenuTest.DummyRMenuc                 C      d S Nr   )xyr   r   r   tk_popup   s    zRMenuTest.DummyRMenu.tk_popupN)r!   r"   r#   rd   r   r   r   r   
DummyRMenu   s    re   c                 C   r`   ra   r   )r   r   r   r   test_rclick   s   zRMenuTest.test_rclickN)r!   r"   r#   r$   r   r   re   rf   r   r   r   r   r_      s    

	r_   __main__r'   )	verbosity)__doc__Zidlelibr   Zunittestcollectionsr   Ztest.supportr   tkinterr   ZEditorWindowr   ZTestCaser   r%   rM   rQ   r_   r!   mainr   r   r   r   <module>   s    =S