a
    åzeÞ  ã                   @   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 )z¥Test 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   ú7/usr/lib/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 sü0    Y  qdS )z2
        Test ParenMatch with each style.
        ))Ú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!   r0   r1   r3   r   r   r   r   r      s   

"r   Ú__main__é   )Ú	verbosity)Ú__doc__Zidlelib.parenmatchr   Ztest.supportr   ZunittestZunittest.mockr   Útkinterr   r   r   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s   X