B
    v9ak9                 @   s   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 )    )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   &/usr/lib/python3.7/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sidefillexpandr   )r   r   r   Zwithdrawr   r   r   r   insertcode_sample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)r2   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%   r2   editwinr   textfontassertIsNoner4   r:   
topvisibler   tkcallt1t2)r   eqZedr2   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 )Nr9   r:   zdoesn't exist)
r2   r5   assertRaisesr   r   r@   rA   rB   ZassertInrC   )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   r1   reloadr;   r2   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breakr7   ZfgrJ   bgrI   z1.0zend-1cr
   zHide Code ContextzShow Code Context)r;   r2   toggle_code_context_eventr4   ZassertIsNotNoner=   rM   getr<   r   r>   )r   rD   r2   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      )rX   rX   z    def __init__(self, a, b):def
   )   rX   z    def compare(self):rZ   )   r]   z        if a > b:if   )r[   r]   z        elif a < b:elifrV   r]   )Z
stopindent)r;   r2   Zget_contextrF   AssertionError)r   rD   Z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   r8   r
   Fr   rV   z1.0zend-1cr
   )rV   r   zclass C1():rW   rU   zclass C1():rX   )rX   rX   z    def __init__(self, a, b):rZ   rY   z)class C1():
    def __init__(self, a, b):r_   )r\   rX   z    def compare(self):rZ   )r]   r]   z        if a > b:r^   )r[   r]   z        elif a < b:r`      zHclass C1():
    def compare(self):
        if a > b:
        elif a < b:   z    def __init__(self, a, b):)r;   r2   r4   rR   r>   update_code_contextr:   r?   r   r0   rS   rN   )r   rD   r2   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 )
NrV   z.0r"   z1.5r   rc   z3.0r]   z1.0)r;   r2   Z
jumptoliner4   rR   r   r0   re   r?   Zmark_setrN   )r   rD   r2   Zjumpr   r   r   test_jumptoline  s0    zCodeContextTest.test_jumptolinere   c             C   sD   | j jr| j   | j   |  | j   | j   |  d S )N)r2   r4   rR   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 )Nr7   ZFakeFontz#222222z#ffff00)rI   rJ   rI   rJ   )r;   r2   r   r   r1   rM   r4   rR   Zconfig_timer_eventr=   Zcontextcolors)r   rD   r2   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/   r3   r6   rE   rH   rO   rT   rb   rf   rg   r   Zpatchobjectr   r1   rh   ri   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)	rm   )u
     ᧔᧒: )z  u   ᧔᧒)z	no spaces)r
   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_firstwordr;   recompile)r   rS   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():rW   rV   z    # Class comment.rU   )rX   z    def __init__(self, a, b):rZ   r\   )r]   z        if a > b:r^   z	if a == b:)r   z	if a == b:r^   )r;   r   Zget_line_infor#   
splitlinesZINFINITY)r   rD   Zglilinesr   r   r   test_get_line_info  s    z%HelperFunctionText.test_get_line_infoN)r   r   r   rt   rw   r   r   r   r   rl   p  s   rl   __main__rV   )	verbosity)Zidlelibr   ZunittestZtest.supportr   Ztkinterr   r   r   r   r   rq   r	   r'   r(   r,   ZIdleUserConfParserr&   r#   r   ZTestCaser   rl   r   r   r   r   r   r   <module>   s&     A(