o
    JAf3                     @   s   d Z ddlmZ ddlZddlmZ ddlZddlZddlZddl	m
Z
 G dd dZe ZejZejZG dd	 d	ejZG d
d dejZG dd dZG dd dZG dd dejZG dd dejZedkrrejdd dS dS )zTest calltip, coverage 76%    )calltipN)Mock)Textc                   @   s   e Zd ZdZdZd"ddZde_dd Zd	e_d"d
dZde_dd Zde_dd Z	de	_d"ddZ
de
_dd Zde_dd Zde_dd Zedd Zed d! ZdS )#TCdocz(ai=None, *b)Nc                 G      dS r   N selfaibr	   r	   5/usr/lib/python3.10/idlelib/idle_test/test_calltip.py__init__       zTC.__init__z(self, ai=None, *b)c                 C   r   r   r	   r   r	   r	   r   t1   r   zTC.t1(self)c                 C   r   r   r	   r
   r	   r	   r   t2   r   zTC.t2z(self, ai, b=None)c                 G   r   r   r	   )r   r   argsr	   r	   r   t3   r   zTC.t3z(self, ai, *args)c                 G   r   r   r	   r   r   r	   r	   r   t4   r   zTC.t4z(self, *args)c                 O   r   r   r	   )r   r   r   r   kwr	   r	   r   t5   r   zTC.t5z(self, ai, b=None, *args, **kw)c                 C   r   r   r	   )nor   r	   r	   r   t6   r   zTC.t6z
(no, self)c                 C   r   r   r	   r   Zcir	   r	   r   __call__   r   zTC.__call__z
(self, ci)c                 C      d S Nr	   r   r	   r	   r   nd    r   zTC.ndc                 C   r   r   r	   )clsar	   r	   r   cm"   r   zTC.cmc                 C   r   r   r	   )r   r	   r	   r   sm$   r   zTC.smr    )__name__
__module____qualname____doc__tipr   r   r   r   r   r   r   r   r!   classmethodr$   staticmethodr%   r	   r	   r	   r   r      s0    



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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S ) Get_argspecTestc                    s    fdd}G dd dt }G dd d}|jd ur#||d|j  |t jd |t jd	 d
}|t jd|  ||jd|  |g jd|  |tjd || t t	d}|tj
d ||j
d d S )Nc                    s     t| | d S r    )assertEqualget_spec)objoutr   r	   r   tiptest7      z.Get_argspecTest.test_builtins.<locals>.tiptestc                   @      e Zd ZdZdS )z+Get_argspecTest.test_builtins.<locals>.Listz
List() docN)r&   r'   r(   r)   r	   r	   r	   r   List;       r5   c                   @   s   e Zd ZdZdS )z)Get_argspecTest.test_builtins.<locals>.SBNr&   r'   r(   r   r	   r	   r	   r   SB>   r6   r8   z(iterable=(), /)
zY(*args, **kwargs)
Create and return a new object.  See help(type) for accurate signature.zY(self, /, *args, **kwargs)
Initialize self.  See help(type(self)) for accurate signature.z&
Append object to the end of the list.z(self, object, /)z(object, /)zmethod(function, instance) aO  (pattern, repl, string, count=0, flags=0)
Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl.  repl can be either a string or a callable;
if a string, backslash escapes in it are processed.  If it is
a callable, it's passed the Match object and must returnzm(repl, string, count=0)
Return the string obtained by replacing the leftmost non-overlapping occurrences o...)listr)   __new__r   appendtypes
MethodTypedefault_tiprecompilesub)r   r2   r5   r8   Z
append_docpr	   r   r   test_builtins5   s0   

zGet_argspecTest.test_builtinsc                 C   s&   t jjd ur| tt jd d S d S )Na6  (width=70, initial_indent='', subsequent_indent='', expand_tabs=True,
    replace_whitespace=True, fix_sentence_endings=False, break_long_words=True,
    drop_whitespace=True, break_on_hyphens=True, tabsize=8, *, max_lines=None,
    placeholder=' [...]')
Object for wrapping/filling text.  The public interface consists of
the wrap() and fill() methods; the other methods are just there for
subclasses to override in order to tweak the default behaviour.
If you want to completely replace the main wrapping algorithm,
you'll probably have to override _wrap_chunks().)textwrapZTextWrapperr)   r.   r/   r   r	   r	   r   test_signature_wrap`   s   z#Get_argspecTest.test_signature_wrapc           
   	   C   s   ddd}ddd}ddd}t j}d	| d
 }d	| d }d	| d | d }||f||f||ffD ]#\}}	| j||	d | t||	 W d    n1 sQw   Y  q3d S )Ndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac                 S   r   r    r	   sr	   r	   r   fooo      z4Get_argspecTest.test_properly_formatted.<locals>.fooc                 S   r   )zHello GuidoNr	   rH   r	   r	   r   barr   s   z4Get_argspecTest.test_properly_formatted.<locals>.bardbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                 S   r   r    r	   )rI   zr	   r	   r   bazv   rK   z4Get_argspecTest.test_properly_formatted.<locals>.bazzV(s='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
zaaaaaaaaaaaaaaaaaaa')z!aaaaaaaaaaaaaaaaaaa')
Hello GuidozRaaaaaaaaaaaaaaaaaaa', z='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
z.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'))funcr   )rG   )rG   rM   )r   Z_INDENTsubTestr.   r/   )
r   rJ   rL   rO   indentZsfooZsbarZsbazrP   r   r	   r	   r   test_properly_formattedm   s:   


z'Get_argspecTest.test_properly_formattedc                 C   s6   dd }d|_ | t|ddtjd  d   d S )Nc                   S   r   r    r	   r	   r	   r	   r   f   r   z2Get_argspecTest.test_docline_truncation.<locals>.fA,  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz()
r#      z...)r)   r.   r/   r   Z	_MAX_COLSr   rT   r	   r	   r   test_docline_truncation   s   (z'Get_argspecTest.test_docline_truncationc                 C   sL   |  ttd |  ttd dd }d|_|  t|ddtj   d S )NzFrange(stop) -> range object
range(start, stop[, step]) -> range objectzbytes(iterable_of_ints) -> bytes
bytes(string, encoding[, errors]) -> bytes
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes objectc                   S   r   r    r	   r	   r	   r	   r   rT      r   z3Get_argspecTest.test_multiline_docstring.<locals>.fza
a
a
a
a
a
a
a
a
a
a
a
a
a
a
()z
a)r.   r/   rangebytesr)   r   Z
_MAX_LINESrV   r	   r	   r   test_multiline_docstring   s   
z(Get_argspecTest.test_multiline_docstringc              	   C   s   dd }d|_ ddd}d|_ dd }d	|_ d
d }d|_ ddd}d|_ |jd ur,dnd}|||||tfD ]#}| j|d | t||j |  W d    n1 sTw   Y  q6d S )Nc                   S   r   r   r	   r	   r	   r	   r   r      r   z*Get_argspecTest.test_functions.<locals>.t1rX   c                 S   r   r   r	   )r#   r   r	   r	   r   r      r   z*Get_argspecTest.test_functions.<locals>.t2z(a, b=None)c                 W   r   r   r	   )r#   r   r	   r	   r   r      r   z*Get_argspecTest.test_functions.<locals>.t3z
(a, *args)c                  W   r   r   r	   r   r	   r	   r   r      r   z*Get_argspecTest.test_functions.<locals>.t4(*args)c                 _   r   r   r	   )r#   r   r   r   r	   r	   r   r      r   z*Get_argspecTest.test_functions.<locals>.t5z(a, b=None, *args, **kw)
docr9   )rP   r    )r*   r)   r   rQ   r.   r/   )r   r   r   r   r   r   r   rP   r	   r	   r   test_functions   s"   

zGet_argspecTest.test_functionsc              	   C   s   t jd urdnd}t jt jt jt jt jt jt jfD ]#}| j	|d | 
t||j|  W d    n1 s7w   Y  q| 
tt jd|  | 
tt jd|  d S )Nr^   r9   )meth(a)z(b))r   r)   r   r   r   r   r   r   r   rQ   r.   r/   r*   r$   r%   )r   r   r`   r	   r	   r   test_methods   s   $zGet_argspecTest.test_methodsc              	   C   s   t jd urdnd}tjdftjdftjdftjdftdft jdffD ]%\}}| j||d | 	t
|||  W d    n1 sBw   Y  q"d S )	Nr^   r9   rX   r]   r   (ci)ra   r`   mtip)r   r)   tcr   r   r   r   r$   rQ   r.   r/   )r   r   r`   re   r	   r	   r   test_bound_methods   s   z"Get_argspecTest.test_bound_methodsc              	   C   st   G dd d}| }|j df|j dffD ]#\}}| j||d | t|| W d    n1 s2w   Y  qd S )Nc                   @      e Zd Zdd ZdS )z1Get_argspecTest.test_starred_parameter.<locals>.Cc                  W   r   r    r	   r\   r	   r	   r   m1   r   z4Get_argspecTest.test_starred_parameter.<locals>.C.m1N)r&   r'   r(   ri   r	   r	   r	   r   C       rj   r]   rd   )ri   rQ   r.   r/   )r   rj   cr`   re   r	   r	   r   test_starred_parameter   s   z&Get_argspecTest.test_starred_parameterc                 C   sL   G dd d}G dd d}t j}| t| j| | t| | d S )Nc                   @   rh   )z7Get_argspecTest.test_invalid_method_get_spec.<locals>.Cc                  [   r   r    r	   )kwargsr	   r	   r   m2   r   z:Get_argspecTest.test_invalid_method_get_spec.<locals>.C.m2N)r&   r'   r(   ro   r	   r	   r	   r   rj      rk   rj   c                   @   rh   )z:Get_argspecTest.test_invalid_method_get_spec.<locals>.Testc                 S   r   r    r	   )r#   r	   r	   r   r      r   zCGet_argspecTest.test_invalid_method_get_spec.<locals>.Test.__call__Nr7   r	   r	   r	   r   Test   rk   rp   )r   Z_invalid_methodr.   r/   ro   )r   rj   rp   re   r	   r	   r   test_invalid_method_get_spec   s
   z,Get_argspecTest.test_invalid_method_get_specc                 C   s   d}t jd|dksJ d S )Nu   (AΑАאاअḀあ, a)r9   ra   )r   Z_first_paramrB   )r   Zunir	   r	   r   test_non_ascii_name   s   z#Get_argspecTest.test_non_ascii_namec              	   C   s`   t jdftjdffD ]#\}}| j||d | t|| W d    n1 s(w   Y  q
d S )Nr   rX   rd   )r   r!   rf   rQ   r.   r/   )r   r`   re   r	   r	   r   test_no_docstring   s   z!Get_argspecTest.test_no_docstringc              	   C   s   G dd d}G dd d|}G dd d|}|t f|t f| df| df| d	ffD ]#\}}| j||d
 | t|| W d    n1 sIw   Y  q+d S )Nc                   @   rh   )z8Get_argspecTest.test_buggy_getattr_class.<locals>.NoCallc                 S   s   t r    )
IndexError)r   namer	   r	   r   __getattr__   rK   zDGet_argspecTest.test_buggy_getattr_class.<locals>.NoCall.__getattr__N)r&   r'   r(   rv   r	   r	   r	   r   NoCall   rk   rw   c                   @   rh   )z7Get_argspecTest.test_buggy_getattr_class.<locals>.CallAc                 S   r   r    r	   r   r	   r	   r   r      rK   z@Get_argspecTest.test_buggy_getattr_class.<locals>.CallA.__call__Nr7   r	   r	   r	   r   CallA   rk   rx   c                   @   rh   )z7Get_argspecTest.test_buggy_getattr_class.<locals>.CallBc                 S   r   r    r	   )Zouir#   r   rl   r	   r	   r   r      rK   z@Get_argspecTest.test_buggy_getattr_class.<locals>.CallB.__call__Nr7   r	   r	   r	   r   CallB   rk   ry   r9   rc   z	(a, b, c)rd   )r?   rQ   r.   r/   )r   rw   rx   ry   r`   re   r	   r	   r   test_buggy_getattr_class   s   z(Get_argspecTest.test_buggy_getattr_classc              	   C   s   G dd dt }G dd d|d}|tt f|tf| dffD ]#\}}| j||d | t|| W d    n1 s=w   Y  qd S )Nc                   @   s   e Zd Zei ji jZdS )z2Get_argspecTest.test_metaclass_class.<locals>.TypeN)r&   r'   r(   property__getitem____setitem__	__class__r	   r	   r	   r   Type   s    r   c                   @   r4   )z4Get_argspecTest.test_metaclass_class.<locals>.Objectr~   N)r&   r'   r(   	__slots__r	   r	   r	   r   Object   s    r   )	metaclassr9   rd   )typer/   r?   rQ   r.   )r   r   r   r`   re   r	   r	   r   test_metaclass_class   s   z$Get_argspecTest.test_metaclass_classc              	   C   sV   ddddg i fD ] }| j |d | t|d W d    n1 s#w   Y  qd S )Nr   g        0   0)r0   r9   )rQ   r.   r/   )r   r0   r	   r	   r   test_non_callables   s   z"Get_argspecTest.test_non_callablesN)r&   r'   r(   rD   rF   rS   rW   r[   r_   rb   rg   rm   rq   rr   rs   rz   r   r   r	   r	   r	   r   r-   -   s     +		

r-   c                   @      e Zd Zdd Zdd ZdS )Get_entityTestc                 C   s   |  td d S )Nz1/0)assertIsNoner   
get_entityr   r	   r	   r   test_bad_entity  r3   zGet_entityTest.test_bad_entityc                 C   s   |  tdt d S )Nint)assertIsr   r   r   r   r	   r	   r   test_good_entity  s   zGet_entityTest.test_good_entityN)r&   r'   r(   r   r   r	   r	   r	   r   r     s    r   c                   @   s   e Zd ZdZdd ZdS )
mock_Shellz.Return mock sufficient to pass to hyperparser.c                 C   s(   t d d|_|| _d| _d| _d| _d S )N)Zreturn_valuez>>>       )r   Ztag_prevrangetextZprompt_last_lineZindentwidthZtabwidth)r   r   r	   r	   r   r     s
   
zmock_Shell.__init__N)r&   r'   r(   r)   r   r	   r	   r	   r   r     s    r   c                   @   r   )mock_TipWindowc                 C   r   r    r	   r   r	   r	   r   r     rK   zmock_TipWindow.__init__c                 C   s&   ||f| _ tt|d\| _| _d S )N.)r   mapr   splitZ	parenlineZparencol)r   r   Z	parenleftZ
parenrightr	   r	   r   showtip  s   
zmock_TipWindow.showtipN)r&   r'   r(   r   r   r	   r	   r	   r   r     s    r   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	WrappedCalltipc                 C   s   t  S r    )r   r   r	   r	   r   _make_tk_calltip_window#  s   z&WrappedCalltip._make_tk_calltip_windowNc                 C   s"   | j rd | _ |  jd7  _d S d S )N   )active_calltiptips_removed)r   eventr	   r	   r   remove_calltip_window&  s   z$WrappedCalltip.remove_calltip_windowc                 C   r   )Nr*   r	   )r   Z
expressionr	   r	   r   	fetch_tip+  rK   zWrappedCalltip.fetch_tipr    )r&   r'   r(   r   r   r   r	   r	   r	   r   r   "  s    
r   c                   @   sH   e Z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S )CalltipTestc                 C   s   t  | _tt| j| _d S r    )r   r   r   r   ct)r"   r	   r	   r   
setUpClass1  s   zCalltipTest.setUpClassc                 C   s"   | j dd d | j_d| j_d S )Nz1.0endr   )r   deleter   r   r   r   r	   r	   r   setUp6  s   zCalltipTest.setUpc                 C   sZ   | j j}| jdd |d | j j| _||  | jdd |d | | j jd  d S )Ng      ?zf(Finsert))r   open_calltipr   r   r   r*   r   )r   ZtestfuncZopentipr	   r	   r   
open_close<  s   
zCalltipTest.open_closec                 C      dd }|  | d S )Nc                 S   s   |  | jjd d S )N)z1.1z1.end)r.   r*   r   r   r	   r	   r   r   H  r3   z)CalltipTest.test_open_close.<locals>.argsr   r   r	   r	   r   test_open_closeG  s   zCalltipTest.test_open_closec                 C   r   )Nc                 S   sF   dD ]}| j dd | jd | jd q| | jj| j d S )Nabcr   r#   T)r   r   r   r   r   r   r*   r   charr	   r	   r   forceM  s
   z.CalltipTest.test_repeated_force.<locals>.forcer   )r   r   r	   r	   r   test_repeated_forceL     zCalltipTest.test_repeated_forcec                 C   r   )Nc              	   S   s   dD ]4}| j |d$ | jd| dD ]	}| jd| q| | jj| j W d    n1 s1w   Y  q| jdd d S )N)r#   ')contextr   (()())r   )rQ   r   r   r   r   r   r*   )r   r   r   r	   r	   r   parensV  s   z0CalltipTest.test_repeated_parens.<locals>.parensr   )r   r   r	   r	   r   test_repeated_parensU  s   z CalltipTest.test_repeated_parensc                 C   r   )Nc                 S   sJ   | j dd dD ]	}| j d| q	| | jj| j | j dd d S )Nr   z# r   
)r   r   r   r   r   r*   r   r	   r	   r   commenta  s
   z0CalltipTest.test_comment_parens.<locals>.commentr   )r   r   r	   r	   r   test_comment_parens`  r   zCalltipTest.test_comment_parensN)r&   r'   r(   r+   r   r   r   r   r   r   r   r	   r	   r	   r   r   /  s    
	r   __main__   )	verbosity)r)   Zidlelibr   ZunittestZunittest.mockr   rE   r=   r@   Zidlelib.idle_test.mock_tkr   r   rf   Z_default_callable_argspecr?   Zget_argspecr/   ZTestCaser-   r   r   r   ZCalltipr   r   r&   mainr	   r	   r	   r   <module>   s,     X
	;