o
    JAf3                     @   s   	 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rqejdd dS dS )    )calltipN)Mock)Textc                   @   s   e 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 )"TCz(ai=None, *b)Nc                 G      d S 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   r   r   r   r   r   r   r   nd    r   zTC.ndc                 C   r   r   r   )clsar   r   r   cm"      zTC.cmc                 C   r   r   r   )r   r   r   r   sm$   r"   zTC.smr   )__name__
__module____qualname__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                   @   s   e Zd ZdS )z+Get_argspecTest.test_builtins.<locals>.ListN)r$   r%   r&   r   r   r   r   List;   s    r1   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>   s    r3   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...)list__doc____new__r   appendtypes
MethodTypedefault_tiprecompilesub)r
   r/   r1   r3   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TextWrapperr6   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   r"   z4Get_argspecTest.test_properly_formatted.<locals>.fooc                 S   s   	 d S r   r   rD   r   r   r   barr   s   z4Get_argspecTest.test_properly_formatted.<locals>.bardbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc                 S   r   r   r   )rE   zr   r   r   bazv   r"   z4Get_argspecTest.test_properly_formatted.<locals>.bazzV(s='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
zaaaaaaaaaaaaaaaaaaa')z!aaaaaaaaaaaaaaaaaaa')
Hello GuidozRaaaaaaaaaaaaaaaaaaa', z='bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
z.bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'))funcdoc)rC   )rC   rH   )r   Z_INDENTsubTestr+   r,   )
r
   rF   rG   rJ   indentZsfooZsbarZsbazrK   rL   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...)r6   r+   r,   r   Z	_MAX_COLSr
   rP   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   rP      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bytesr6   r   Z
_MAX_LINESrR   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>.t1rT   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)
docr4   )rK   r   )r'   r6   r   rM   r+   r,   )r
   r   r   r   r   r   rL   rK   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 )NrZ   r4   )meth(a)z(b))r   r6   r   r   r   r   r   r   r   rM   r+   r,   r'   r!   r#   )r
   rL   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 )	NrZ   r4   rT   rY   r   (ci)r]   r\   mtip)r   r6   tcr   r   r   r   r!   rM   r+   r,   )r
   rL   r\   ra   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   rX   r   r   r   m1   r   z4Get_argspecTest.test_starred_parameter.<locals>.C.m1N)r$   r%   r&   re   r   r   r   r   C       rf   rY   r`   )re   rM   r+   r,   )r
   rf   cr\   ra   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                   @   rd   )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&   rk   r   r   r   r   rf      rg   rf   c                   @   rd   )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__Nr2   r   r   r   r   Test   rg   rl   )r   Z_invalid_methodr+   r,   rk   )r
   rf   rl   ra   r   r   r   test_invalid_method_get_spec   s
   z,Get_argspecTest.test_invalid_method_get_specc                 C   s   d}d S )Nu   (AΑАאاअḀあ, a)r   )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   rT   r`   )r   r   rb   rM   r+   r,   )r
   r\   ra   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                   @   rd   )z8Get_argspecTest.test_buggy_getattr_class.<locals>.NoCallc                 S   s   t r   )
IndexError)r
   namer   r   r   __getattr__   r"   zDGet_argspecTest.test_buggy_getattr_class.<locals>.NoCall.__getattr__N)r$   r%   r&   rr   r   r   r   r   NoCall   rg   rs   c                   @   rd   )z7Get_argspecTest.test_buggy_getattr_class.<locals>.CallAc                 S   r   r   r   r   r   r   r   r      r"   z@Get_argspecTest.test_buggy_getattr_class.<locals>.CallA.__call__Nr2   r   r   r   r   CallA   rg   rt   c                   @   rd   )z7Get_argspecTest.test_buggy_getattr_class.<locals>.CallBc                 S   r   r   r   )Zouir    r   rh   r   r   r   r      r"   z@Get_argspecTest.test_buggy_getattr_class.<locals>.CallB.__call__Nr2   r   r   r   r   CallB   rg   ru   r4   r_   z	(a, b, c)r`   )r;   rM   r+   r,   )r
   rs   rt   ru   r\   ra   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                   @   s   e Zd ZdZdS )z4Get_argspecTest.test_metaclass_class.<locals>.Objectrz   N)r$   r%   r&   	__slots__r   r   r   r   Object   s    r}   )	metaclassr4   r`   )typer,   r;   rM   r+   )r
   r{   r}   r\   ra   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)r-   r4   )rM   r+   r,   )r
   r-   r   r   r   test_non_callables   s   z"Get_argspecTest.test_non_callablesN)r$   r%   r&   r@   rB   rO   rS   rW   r[   r^   rc   ri   rm   rn   ro   rv   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  r0   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d ZdS )
mock_Shellc                 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     s    r   c                   @   r   )mock_TipWindowc                 C   r   r   r   r   r   r   r   r     r"   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   s   dS )Nr'   r   )r
   Z
expressionr   r   r   	fetch_tip+  r"   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  r0   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   )rM   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)Zidlelibr   ZunittestZunittest.mockr   rA   r9   r<   Zidlelib.idle_test.mock_tkr   r   rb   Z_default_callable_argspecr;   Zget_argspecr,   ZTestCaser*   r   r   r   ZCalltipr   r   r$   mainr   r   r   r   <module>   s,     X
	;