o
    JAfD-  ã                   @   s  d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 ddl
mZmZ ddl
mZ ddlZdd	„ Zd
d„ ZG dd„ dƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZedkrˆejdd dS dS )z Test searchengine, coverage 99%.é    )ÚsearchengineN)Ú
BooleanVarÚ	StringVarÚTclError)Ú
messagebox)ÚVarÚMbox)ÚTextc                   C   s   t t_t t_tt_d S ©N)r   Úser   r   r   r   © r   r   ú:/usr/lib/python3.10/idlelib/idle_test/test_searchengine.pyÚsetUpModule   ó   
r   c                   C   s   t t_ tt_tt_d S r
   )r   r   r   r   r   r   r   r   ÚtearDownModule   r   r   c                   @   ó   e Zd Zdd„ ZdS )ÚMockc                 O   s   d S r
   r   )ÚselfÚargsÚkwargsr   r   r   Ú__init__    ó    zMock.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   c                   @   r   )ÚGetTestc                 C   s`   t j}tt _z%tƒ }t  |¡}|  |t j¡ |  |j|¡ |  t  |¡|¡ W |t _d S |t _w r
   )r   ÚSearchEnginer   ÚgetZassertIsInstanceZassertIsZ_searchengine)r   Zsaved_EngineÚrootÚenginer   r   r   Útest_get$   s   
zGetTest.test_getN)r   r   r   r    r   r   r   r   r   "   ó    r   c                   @   r   )ÚGetLineColTestc                 C   sH   |   t d¡d¡ |   t d¡d¡ |  ttjd¡ |  ttjd¡ d S )Nú1.0)é   r   z1.11)r$   é   z1.0 lineendÚend)ÚassertEqualr   Zget_line_colZassertRaisesÚ
ValueError©r   r   r   r   Útest_get_line_col2   s   z GetLineColTest.test_get_line_colN)r   r   r   r*   r   r   r   r   r"   0   r!   r"   c                   @   r   )ÚGetSelectionTestc                 C   sV   t ƒ }| dd¡ dd„ }||_|  t |¡d¡ dd„ }||_|  t |¡d¡ d S )	Nr#   zHello World!c                 S   ó   | dkrdS | dkrdS t ‚)Nú	sel.firstr#   úsel.lastú1.12©r   ©Úsr   r   r   ÚselL   s   z0GetSelectionTest.test_get_selection.<locals>.sel)r#   r/   c                 S   ó   | dkrdS t ‚©NÚinsertú1.5r0   r1   r   r   r   ÚmarkT   ó   z1GetSelectionTest.test_get_selection.<locals>.mark)r7   r7   )ÚmockTextr6   Úindexr'   r   Zget_selection)r   Útextr3   r8   r   r   r   Útest_get_selectionF   s   z#GetSelectionTest.test_get_selectionN)r   r   r   r=   r   r   r   r   r+   9   s    r+   c                   @   r   )ÚReverseSearchTestc                 C   s   | j }d}t d¡}|t ||t|ƒ¡ ¡ dƒ |t ||d¡ ¡ dƒ |t ||d¡ ¡ dƒ |t ||d¡ ¡ dƒ |t ||d¡d ƒ d S )	NzHere is an 'is' test text.Úis)é   é   rA   é   )é   é   rD   é   )r'   ÚreÚcompiler   Zsearch_reverseÚlenÚspan)r   ÚEqualÚlineÚprogr   r   r   Útest_search_reverse^   s   
z%ReverseSearchTest.test_search_reverseN)r   r   r   rM   r   r   r   r   r>   \   r!   r>   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSearchEngineTestc                 C   s   t jd d| _d S )N)r   )r   r   r   r)   r   r   r   ÚsetUpl   s   zSearchEngineTest.setUpc                 C   sþ   | j }| j}|| ¡ dƒ | d¡ || ¡ dƒ || ¡ dƒ |j d¡ || ¡ dƒ || ¡ dƒ |j d¡ || ¡ dƒ || 	¡ dƒ |j
 d¡ || 	¡ dƒ || ¡ dƒ |j d¡ || ¡ dƒ || ¡ dƒ |j d¡ || ¡ dƒ d S )NÚ ÚhelloFr$   Tr   )r   r'   ÚgetpatÚsetpatZisreÚrevarÚsetZiscaseÚcasevarZiswordÚwordvarZiswrapÚwrapvarZisbackÚbackvar©r   r   rJ   r   r   r   Útest_is_getq   s(   
zSearchEngineTest.test_is_getc                 C   sJ   | j }| d¡ |  | ¡ d¡ |j d¡ | d¡ |  | ¡ d¡ d S )Nú\sr$   ú\\s)r   Zsetcookedpatr'   rR   rT   rU   )r   r   r   r   r   Útest_setcookedpat   s   

z"SearchEngineTest.test_setcookedpatc                 C   sŽ   | j }| j}|| ¡ dƒ | d¡ || ¡ dƒ |j d¡ || ¡ dƒ |j d¡ | d¡ || ¡ dƒ |j d¡ || ¡ dƒ d S )NrP   rQ   Tz	\bhello\bFr\   r]   )r   r'   ZgetcookedpatrS   rW   rU   rT   rZ   r   r   r   Útest_getcookedpat•   s   

z"SearchEngineTest.test_getcookedpatc                 C   s¼   | j }| j}| d¡ | ¡ }||jt dtj¡jƒ |j 	d¡ | ¡ }||jt d¡jdƒ | d¡ || ¡ d ƒ |t
jjdƒ | d¡ |j 	d¡ || ¡ d ƒ |t
jjdƒ d S )NZHellor$   r   rP   zError: Empty regular expressionú+z-Error: nothing to repeat
Pattern: +
Offset: 0)r   r'   rS   ZgetprogÚpatternrF   rG   Ú
IGNORECASErV   rU   r   Ú	showerrorÚmessagerT   )r   r   rJ   Ztemppatr   r   r   Útest_getprog¥   s&   

ÿ
ÿzSearchEngineTest.test_getprogc                 C   s†   t j}| j}d}d}|| j ||¡d ƒ ||jdƒ d| d }||j|ƒ || j ||d¡d ƒ ||jdƒ |d7 }||j|ƒ d S )Nz[a-zz$unexpected end of regular expressionzRegular expression errorzError: z
Pattern: [a-zrC   z

Offset: 5)r   rc   r'   r   Zreport_errorÚtitlerd   )r   rc   rJ   ÚpatÚmsgZexpected_messager   r   r   Útest_report_errorº   s   z"SearchEngineTest.test_report_errorN)	r   r   r   rO   r[   r^   r_   re   ri   r   r   r   r   rN   i   s    rN   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú
SearchTestc                 C   sN   t ƒ | _d}| j d|¡ t d¡| _t d ¡| _dd„ | j_	dd„ | j_
d S )Nú&First line
Line with target
Last line
r#   Útargetc                  W   ó   d| fS )NÚfr   ©r   r   r   r   Ú<lambda>Ü   ó    z'SearchTest.setUpClass.<locals>.<lambda>c                  W   rm   )NÚbr   ro   r   r   r   rp   Ý   rq   )r:   r<   r6   rF   rG   rg   r   r   r   Úsearch_forwardÚsearch_backward©ÚclsZ	test_textr   r   r   Ú
setUpClassÎ   s   ÿzSearchTest.setUpClassc              	   C   sx  | j }| j}|j}| j}| j}|j d ¡ |||ƒd ƒ dd„ }||_||||ƒd||ddddffƒ |j d¡ ||||ƒd||ddddffƒ |j d¡ |j	 d¡ ||||ƒd||ddddffƒ |j	 d¡ d	d
„ }||_||||ƒd||ddddffƒ ||||dƒd||ddddffƒ |j	 d¡ ||||ƒd||ddddffƒ ||||dƒd||ddddffƒ d S )Nc                 S   r4   r5   r0   r1   r   r   r   r8   ï   r9   z$SearchTest.test_search.<locals>.markrn   r$   rC   TFrr   c                 S   r,   )Nr-   z2.10r.   z2.16r0   r1   r   r   r   r3   ü   s   z#SearchTest.test_search.<locals>.selé   é   é
   )
r'   r   Zsearch_textr<   rg   ZpatvarrU   r;   rX   rY   )r   rJ   r   Úsearchr<   rg   r8   r3   r   r   r   Útest_searchä   s.       " &zSearchTest.test_searchN)r   r   r   Úclassmethodrw   r|   r   r   r   r   rj   Ë   s    
rj   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚForwardBackwardTestc                 C   s`   t  d ¡| _tƒ | _dd„ | j_d}| j d|¡ t d¡| _	d| _
t d¡| _t d¡| _d S )	Nc                 S   s   dS )Nz4.0r   )r;   r   r   r   rp     r   z0ForwardBackwardTest.setUpClass.<locals>.<lambda>rk   r#   rl   )rx   )rz   ry   Zxyzz\w*)r   r   r   r:   r<   r;   r6   rF   rG   rg   ÚresÚfailpatÚemptypatru   r   r   r   rw     s   ÿzForwardBackwardTest.setUpClassc                    s   d‡ ‡fdd„	}|S )Nr   c                    s0   ˆ ˆj | ||||ƒ}|r|d |d  ¡ fS |S )Nr   r$   )r<   rI   )rg   rK   ÚcolÚwrapÚokr   ©Úfuncr   r   r   r{   #  s   z/ForwardBackwardTest.make_search.<locals>.search)r   r   )r   r†   r{   r   r…   r   Úmake_search"  s   zForwardBackwardTest.make_searchc                 C   s¼   | j }|  | jj¡}| j}|||dddƒ| jƒ |||dddƒ| jƒ |||dddƒd ƒ |||dddƒ| jƒ ||| jdddƒd ƒ ||| jddddd	d
ƒ ||| jdddƒ| jƒ d S )Nr$   r   Té   Frx   rz   é	   ©r„   ©rx   )r‰   r‰   )r'   r‡   r   rs   rg   r   r€   r   )r   rJ   Zforwardrg   r   r   r   Útest_search_forward)  s   z'ForwardBackwardTest.test_search_forwardc                 C   sº   | j }|  | jj¡}| j}|||dddƒ| jƒ |||dddƒ| jƒ |||dddƒd ƒ |||dddƒ| jƒ ||| jdddƒd ƒ ||| jdd	ddd
dƒ ||| jdddƒdƒ d S )Nrˆ   rC   Trx   r   Fry   r‰   rz   rŠ   r‹   )rx   )rC   r‰   )r'   r‡   r   rt   rg   r   r€   r   )r   rJ   Zbackwardrg   r   r   r   Útest_search_backward:  s   z(ForwardBackwardTest.test_search_backwardN)r   r   r   r}   rw   r‡   rŒ   r   r   r   r   r   r~     s    
r~   Ú__main__rx   )Ú	verbosity)Ú__doc__Zidlelibr   r   ZunittestÚtkinterr   r   r   r   Zidlelib.idle_test.mock_tkr   r   r	   r:   rF   r   r   r   ZTestCaser   r"   r+   r>   rN   rj   r~   r   Úmainr   r   r   r   Ú<module>   s*    	#b=Cÿ