a
    Kb                     @   s   d Z ddlmZ ddlmZ ed ddlZddlmZ ddlm	Z	m
Z
 G dd	 d	ZG d
d dejZedkr|ejdd dS )zTest parenmatch, coverage 91%.

This must currently be a gui test because ParenMatch methods use
several text methods not defined on idlelib.idle_test.mock_tk.Text.
    )
ParenMatch)requiresZguiN)Mock)TkTextc                   @   s   e Zd Zdd ZdS )DummyEditwinc                 C   s   || _ d| _d| _d| _d S )N   z>>>)textZindentwidthZtabwidthZprompt_last_line)selfr	    r   2lib/python3.9/idlelib/idle_test/test_parenmatch.py__init__   s    zDummyEditwin.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   sL   e Zd Zedd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )ParenMatchTestc                 C   s8   t  | _| j  t| j| _t| j| _t | j_d S N)	r   rootZwithdrawr   r	   r   editwinr   Z
text_frameclsr   r   r   
setUpClass   s
    
zParenMatchTest.setUpClassc                 C   s$   | ` | `| j  | j  | `d S r   )r	   r   r   Zupdate_idletasksZdestroyr   r   r   r   tearDownClass!   s    

zParenMatchTest.tearDownClassc                 C   s   | j dd d S )N1.0end)r	   delete)r
   r   r   r   tearDown(   s    zParenMatchTest.tearDownc                 C   s   t | j}dd |_|S )Nc                   S   s   d S r   r   r   r   r   r   <lambda>-       z/ParenMatchTest.get_parenmatch.<locals>.<lambda>)r   r   Zbellr
   pmr   r   r   get_parenmatch+   s    

zParenMatchTest.get_parenmatchc              	   C   s  | j }|  }dD ]\}}}| j|d |dd ||_|dd |d | d|  |d	kr~| 	|
d
dd | 	|d
d| |dd |  | d|  | |d
dd |d | 	|d
d| W d   q1 s0    Y  qdS )z2
        Test ParenMatch with each style.
        ))Zopener1.10z1.11r"   )defaultr"   r"   )parens)z1.141.15)r&   1.16)Z
expression)r#   r&   )r#   r'   )styler   r   insertzdef foobar(a, beventz<<parenmatch-check-restore>>r%   Zparenr"   )r   N)r	   r!   ZsubTestr   ZSTYLEr)   flash_paren_eventZassertInZ
event_infoZassertTupleEqualZtag_nextrangeZtag_prevrangerestore_eventZassertNotInZassertEqualparen_closed_event)r
   r	   r    r(   Zrange1Zrange2r   r   r   test_paren_styles0   s4    

z ParenMatchTest.test_paren_stylesc                 C   s^   | j }|  }|dd |d |dd |d |d |dd |d dS )z
        Test corner cases in flash_paren_event and paren_closed_event.

        These cases force conditional expression and alternate paths.
        r)   z# this is a commen)r*   z
defz	 a, *arg)N)r	   r!   r)   r.   r,   )r
   r	   r    r   r   r   test_paren_cornerR   s    


z ParenMatchTest.test_paren_cornerc                 C   sN   |   }t |_|d | |jj |j  |d | |jj d S )Nr      )r!   r   r-   Zhandle_restore_timerZ
assertTrueZcalledZ
reset_mockZassertFalser   r   r   r   test_handle_restore_timere   s    


z(ParenMatchTest.test_handle_restore_timerN)r   r   r   classmethodr   r   r   r!   r/   r0   r2   r   r   r   r   r      s   

"r   __main__   )	verbosity)__doc__Zidlelib.parenmatchr   Ztest.supportr   ZunittestZunittest.mockr   Ztkinterr   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s   X