B
    v9a                 @   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   %/usr/lib/python3.7/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 )N)r	   r   r   Zupdate_idletasksZdestroy)r   r   r   r   tearDownClass!   s    

zParenMatchTest.tearDownClassc             C   s   | j dd d S )Nz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 )Nr   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 }|  }xd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 R X qW dS )z2
        Test ParenMatch with each style.
        ))opener)z1.10z1.11)z1.10z1.11)default)z1.10z1.11)z1.10z1.11)parens)z1.14z1.15)z1.15z1.16)Z
expression)z1.10z1.15)z1.10z1.16)stylez1.0r   insertzdef foobar(a, beventz<<parenmatch-check-restore>>r    Zparen)z1.10z1.11)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   s.    


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assertFalse)r
   r   r   r   r   test_handle_restore_timere   s    


z(ParenMatchTest.test_handle_restore_timerN)r   r   r   classmethodr   r   r   r   r(   r)   r+   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