B
    \k9                 @   s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlZddlmZ ejjZededededd	Zd
ZG dd dZG dd dejZG dd dejZedkrejdd dS )zTest codecontext, coverage 100%    )codecontextN)requires)TkFrameTextTclError)mock)config )mainZ	highlightkeys
extensionsz
class C1():
    # Class comment.
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def compare(self):
        if a > b:
            return a
        elif a < b:
            return b
        else:
            return None
c               @   s   e Zd Zdd Zdd ZdS )DummyEditwinc             C   s"   || _ || _|| _|| _d| _d S )Nr
   )roottopZ
text_frametextlabel)selfr   framer    r   3lib/python3.7/idlelib/idle_test/test_codecontext.py__init__&   s
    zDummyEditwin.__init__c             K   s   |d | _ d S )Nr   )r   )r   kwargsr   r   r   update_menu_label-   s    zDummyEditwin.update_menu_labelN)__name__
__module____qualname__r   r   r   r   r   r   r   %   s   r   c               @   s   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d Zdd Zdd Zdd Zejejddd Zdd ZdS )CodeContextTestc             C   s~   t d t  }| _|  t| }| _t| }| _|dt	 |j
dddd |j
dddd t|||| _ttj_d S )NZguiz1.0leftZboth   )ZsideZfillexpandr   )r   r   r   Zwithdrawr   r   r   r   insertcode_sampleZpackr   editortestcfgr   idleConfuserCfg)clsr   r   r   r   r   r   
setUpClass3   s    zCodeContextTest.setUpClassc             C   s@   t tj_| jjdd | `| `| `| j	  | j
  | `d S )Nz1.0end)usercfgr   r%   r&   r#   r   deleter   r   Zupdate_idletasksdestroy)r'   r   r   r   tearDownClassA   s    

zCodeContextTest.tearDownClassc             C   s   | j d t| j| _d S )Nr   )r   yviewr   CodeContextr#   cc)r   r   r   r   setUpJ   s    zCodeContextTest.setUpc             C   s,   | j jr| j j  | j   | j `| ` d S )N)r0   contextr,   __del__)r   r   r   r   tearDownN   s    
zCodeContextTest.tearDownc             C   s   | j }| j}| j}||j| ||j|j ||j|jd  | |j ||jdg ||j	d || j
jdd| jjd d || j
jdd| jjd d d S )Nfont)r   r
   Fr   afterinfoZtimer)assertEqualr#   r0   editwinr   textfontassertIsNoner2   r8   
topvisibler   tkcallt1t2)r   eqZedr0   r   r   r   	test_initU   s     zCodeContextTest.test_initc          	   C   s   | j   | t(}| jjdd| j j | d| W d Q R X | t(}| jjdd| j j	 | d| W d Q R X | j `| j `	| j   d S )Nr7   r8   zdoesn't exist)
r0   r3   assertRaisesr   r   r>   r?   r@   ZassertInrA   )r   msgr   r   r   test_delc   s    
zCodeContextTest.test_delc             C   s4   t j  | | jjddd | | jjd d S )NZ	lightgrayz#000000)
background
foreground   )r   r/   reloadr9   r0   colorscontext_depth)r   r   r   r   test_reloadp   s    

zCodeContextTest.test_reloadc             C   s   | j }| j}|j}|jr|  || d | |j ||jd |j ||jd |jd  ||jd |jd  ||jddd	 ||jj	d
 || d | 
|j ||jj	d d S )Nbreakr5   ZfgrH   ZbgrG   z1.0zend-1cr
   zHide Code ContextzShow Code Context)r9   r0   toggle_code_context_eventr2   ZassertIsNotNoner;   rK   getr:   r   r<   )r   rB   r0   Ztoggler   r   r   test_toggle_code_context_eventv   s    z.CodeContextTest.test_toggle_code_context_eventc          	   C   s.  | j }| jj}| t |ddd W d Q R X ||ddgdf ||ddgdf ||dddgdf ||d	dd
dgdf ||ddd
ddgdf ||ddddd
ddgdf ||dddd
ddgdf ||dddddgdf ||dddd
ddgdf ||dddddgdf d S )Nr   r   )Zstopline   )   r   zclass C1():class      )rU   rU   z    def __init__(self, a, b):def
   )   rU   z    def compare(self):rW   )   rZ   z        if a > b:if   )rX   rZ   z        elif a < b:elifrS   rZ   )Z
stopindent)r9   r0   Zget_contextrD   AssertionError)r   rB   gcr   r   r   test_get_context   s:    


z CodeContextTest.test_get_contextc             C   s*  | j }| j}|js|  | |  ||jdg ||jd |j	d |  ||jdg ||jd ||j
ddd |j	d |  ||jddg ||jd ||j
ddd	 |j	d |  ||jddg ||jd
 ||j
ddd	 |j	d
 |  ||jdddg ||jd ||j
ddd |j	d |  ||jdddddg ||jd ||j
ddd |  d|_||jdddddg ||jd ||j
ddd |j	d |  ||jdddg ||jd ||j
ddd d S )N)r   r6   r
   Fr   rS   z1.0zend-1cr
   )rS   r   zclass C1():rT   rR   zclass C1():rU   )rU   rU   z    def __init__(self, a, b):rW   rV   z)class C1():
    def __init__(self, a, b):r\   )rY   rU   z    def compare(self):rW   )rZ   rZ   z        if a > b:r[   )rX   rZ   z        elif a < b:r]      zHclass C1():
    def compare(self):
        if a > b:
        elif a < b:   z    def __init__(self, a, b):)r9   r0   r2   rO   r<   update_code_contextr8   r=   r   r.   rP   rL   )r   rB   r0   r   r   r   test_update_code_context   sl    z(CodeContextTest.test_update_code_contextc             C   s   | j }| j}|j}|js |  |jd d |  ||jd |j	dd |  ||jd |jd d |  ||jd |j	dd |  ||jd d|_
|jd d |  ||jd |j	dd	 |  ||jd d S )
NrS   z.0r!   z1.5r   ra   z3.0rZ   z1.0)r9   r0   Z
jumptoliner2   rO   r   r.   rc   r=   Zmark_setrL   )r   rB   r0   Zjumpr   r   r   test_jumptoline  s0    zCodeContextTest.test_jumptolinerc   c             C   sD   | j jr| j   | j   |  | j   | j   |  d S )N)r0   r2   rO   Ztimer_eventZassert_not_calledZassert_called)r   Zmock_updater   r   r   test_timer_event/  s    



z CodeContextTest.test_timer_eventc             C   s  | j }| j}|jd }tjj}d}ddd}|jr:|  ||jd< |tj_|  ||j	| ||j
| |  ||jd< |tj_|  ||j	| ||j
| ||jd | ||jd |d  ||jd |d  ||jd< |  ||j	| ||j
| ||jd | ||jd |d  ||jd |d  ||jd< |tj_|  ||j	| ||j
| ||jd | ||jd |d  ||jd |d  |tj_|  d S )Nr5   ZFakeFontz#222222z#ffff00)rG   rH   rG   rH   )r9   r0   r   r   r/   rK   r2   rO   Zconfig_timer_eventr;   Zcontextcolors)r   rB   r0   Z	save_fontZsave_colorsZ	test_fontZtest_colorsr   r   r   test_config_timer_event<  sN    





z'CodeContextTest.test_config_timer_eventN)r   r   r   classmethodr(   r-   r1   r4   rC   rF   rM   rQ   r`   rd   re   r   Zpatchobjectr   r/   rf   rg   r   r   r   r   r   1   s   	0Q!r   c               @   s   e Zd Zdd Zdd ZdS )HelperFunctionTextc             C   sJ   t j}d}x |D ]\}}| ||| qW | |dtddd d S )N))z    first word)z    first)z	first word)	rk   )u
     ᧔᧒: )z  u   ᧔᧒)z	no spaces)r
   Zno)r
   )r
   r
   )z# TEST COMMENT)r
   r
   )z    (continuation))z    r
   z    (continuation)z^(\s*)([^\s]*))c)z    z(continuation))r   Zget_spaces_firstwordr9   recompile)r   rP   Z
test_lineslineZexpected_outputr   r   r   test_get_spaces_firstwordr  s    z,HelperFunctionText.test_get_spaces_firstwordc             C   s   | j }tj}t }|||d tjddf |||d d |||d tjddf |||d d	 |||d
 d ||dd d S )Nr   r
   Fr   )r   zclass C1():rT   rS   z    # Class comment.rR   )rU   z    def __init__(self, a, b):rW   rY   )rZ   z        if a > b:r[   z	if a == b:)r   z	if a == b:r[   )r9   r   Zget_line_infor"   
splitlinesZINFINITY)r   rB   Zglilinesr   r   r   test_get_line_info  s    z%HelperFunctionText.test_get_line_infoN)r   r   r   rq   rt   r   r   r   r   rj   p  s   rj   __main__rS   )	verbosity)__doc__Zidlelibr   ZunittestZtest.supportr   Ztkinterr   r   r   r   r   rn   r	   r%   r&   r*   ZIdleUserConfParserr$   r"   r   ZTestCaser   rj   r   r   r   r   r   r   <module>   s(     A(