a
    äzed  ã                   @   sX   d dl Z d dlmZ d dlZd dlZG dd„ dƒZG dd„ de jƒZedkrTe  	¡  dS )é    N)Úpatchc                   @   s   e Zd ZdZdZdZdS )Ú
CompleteMez6 Trivial class used in testing rlcompleter.Completer. é   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚspamZ_ham© r   r   ú+/usr/lib/python3.9/test/test_rlcompleter.pyr      s   r   c                   @   sb   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	e
j dd¡dd„ ƒZdd„ ZdS )ÚTestRlcompleterc                 C   s2   t  ¡ | _t  ttttd¡| _| j dd¡ d S )N)r
   Zeggr   Ú r   )	ÚrlcompleterÚ	CompleterÚstdcompleterÚdictÚintÚstrr   Ú	completerÚcomplete©Úselfr   r   r   ÚsetUp   s    
þ
zTestRlcompleter.setUpc                 C   sh   G dd„ dt ƒ}G dd„ dtƒ}|  | jj¡ |  | jj¡ |  t |ƒ ¡j¡ |  	t
tj|dƒ¡ d S )Nc                   @   s   e Zd ZdS )z)TestRlcompleter.test_namespace.<locals>.AN©r   r   r   r   r   r   r   ÚA   s   r   c                   @   s   e Zd ZdS )z)TestRlcompleter.test_namespace.<locals>.BNr   r   r   r   r   ÚB   s   r   )r   )r   ÚlistÚ
assertTruer   Zuse_main_nsÚassertFalser   r   r   ZassertRaisesÚ	TypeError)r   r   r   r   r   r   Útest_namespace   s    zTestRlcompleter.test_namespacec                 C   s¦   |   t| j d¡ƒdd„ ttƒD ƒ¡ |   t| j d¡ƒdd„ ttƒD ƒ¡ |   | j d¡g ¡ |   | j d¡dg¡ |   | j d	¡d
g¡ |   | j d¡dg¡ d S )NÚdic                 S   s   g | ]}|  d ¡r|d ‘qS )r"   ú(©Ú
startswith©Ú.0Úxr   r   r   Ú
<listcomp>$   ó    z7TestRlcompleter.test_global_matches.<locals>.<listcomp>Ústc                 S   s   g | ]}|  d ¡r|d ‘qS )r+   r#   r$   r&   r   r   r   r)   &   r*   ZakaksajadhakZ	CompleteMzCompleteMe(Zegzegg()ÚassertEqualÚsortedr   Zglobal_matchesÚdirÚbuiltinsr   r   r   r   r   Útest_global_matches!   s     ÿÿÿÿÿz#TestRlcompleter.test_global_matchesc                 C   s  |   | j d¡dd„ ttƒD ƒ¡ |   | j d¡g ¡ tdd„ td ƒD ƒƒ}|   | j d¡|¡ |   | j d¡|¡ |   | j d	¡|¡ |   | j d
¡dg¡ |   | j d¡g ¡ |   | j d¡ddg¡ |   | j d¡dg¡ | j d¡}|D ]}|  | d¡|¡ qð|  	d|¡ |  	d|¡ t
jtdtddH |   | j d¡dg¡ |   | j d¡dd„ ttƒD ƒ¡ W d   ƒ n1 s‚0    Y  d S )Nzstr.sc                 S   s    g | ]}|  d ¡rd |¡‘qS )Úszstr.{}(©r%   Úformatr&   r   r   r   r)   5   s   
ÿz5TestRlcompleter.test_attr_matches.<locals>.<listcomp>ztuple.foospameggc                 S   s$   h | ]}d ||dkrdndf ’qS )z	None.%s%sr	   r#   r   r   r&   r   r   r   Ú	<setcomp>8   s   ÿz4TestRlcompleter.test_attr_matches.<locals>.<setcomp>zNone.zNone._zNone.__zCompleteMe.spzCompleteMe.spamzCompleteme.eggzCompleteMe.zCompleteMe.mro(zCompleteMe._zCompleteMe._hamzCompleteMe.__zCompleteMe.__name__zCompleteMe.__new__(ÚmeT)ZcreatezCompleteMe.me.me.spzCompleteMe.me.me.spamzegg.sc                 S   s    g | ]}|  d ¡rd |¡‘qS )r1   zegg.{}(r2   r&   r   r   r   r)   P   s   
ÿ)r,   r   Zattr_matchesr.   r   r-   r   r   r%   ZassertInr   Úobjectr   )r   ZexpectedÚmatchesr(   r   r   r   Útest_attr_matches2   s@    ÿÿÿÿÿÿÿz!TestRlcompleter.test_attr_matchesc                 C   sJ   G dd„ dƒ}|ƒ }t  t|d¡}|  | dd¡d¡ |  |jd¡ dS )	z;Ensure getattr() is invoked no more than once per attributec                       s$   e Zd ZdZdZ‡ fdd„Z‡  ZS )z3TestRlcompleter.test_excessive_getattr.<locals>.Foor   r   c                    s&   |dkr|  j d7  _ d S tƒ  |¡S )NÚbarr   )ÚcallsÚsuperÚ__getattribute__)r   Úname©Ú	__class__r   r   r<   ]   s    zDTestRlcompleter.test_excessive_getattr.<locals>.Foo.__getattribute__)r   r   r   r:   r9   r<   Ú__classcell__r   r   r>   r   ÚFooZ   s   rA   ©Úfúf.br   úf.barr   N)r   r   r   r,   r   r:   ©r   rA   rC   r   r   r   r   Útest_excessive_getattrS   s
    	z&TestRlcompleter.test_excessive_getattrc                 C   sH   G dd„ dƒ}|ƒ }t  t|d¡}|  | dd¡d¡ |  |j¡ d S )Nc                   @   s    e Zd ZdZdZedd„ ƒZdS )z<TestRlcompleter.test_property_method_not_called.<locals>.Foor   Fc                 S   s   d| _ | jS )NT)Úproperty_calledÚ_barr   r   r   r   r9   m   s    z@TestRlcompleter.test_property_method_not_called.<locals>.Foo.barN)r   r   r   rI   rH   Úpropertyr9   r   r   r   r   rA   i   s   rA   rB   rD   r   rE   )r   r   r   r,   r   r   rH   rF   r   r   r   Útest_property_method_not_calledh   s
    	z/TestRlcompleter.test_property_method_not_calledc                 C   s8   G dd„ dƒ}t  t|ƒ d¡}|  | dd¡d¡ d S )Nc                   @   s   e Zd ZdZdS )z0TestRlcompleter.test_uncreated_attr.<locals>.Foo)r9   N)r   r   r   Ú	__slots__r   r   r   r   rA   {   s   rA   rB   zf.r   rE   )r   r   r   r,   r   )r   rA   r   r   r   r   Útest_uncreated_attrx   s    z#TestRlcompleter.test_uncreated_attrzrlcompleter._readline_availableFc                 C   sÔ   t  ¡ }|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd	¡d
¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ d S )Nr   r   ú	Úazand r   zas Úasr   úassert ZanÚpaÚpassZFaÚFalseÚelzelif ÚelseÚtrútry:)r   r   r,   r   )r   r   r   r   r   Útest_complete€   s    zTestRlcompleter.test_completec                 C   sä   d d dd„ d dd„ dœ}t  |¡}|  | dd¡d¡ |  | dd¡¡ |  | dd¡d	¡ |  | dd¡¡ |  | d
d¡d¡ |  | d
d¡¡ |  | dd¡d¡ |  | dd¡¡ |  | dd¡d¡ |  | dd¡¡ d S )Nc                   S   s   d S ©Nr   r   r   r   r   Ú<lambda>’   r*   z8TestRlcompleter.test_duplicate_globals.<locals>.<lambda>c                   S   s   d S rZ   r   r   r   r   r   r[   ”   r*   )rT   ÚassertÚtryÚ
memoryviewÚEllipsisrT   r   r   r\   rQ   r]   rX   r^   r_   z	Ellipsis()r   r   r,   r   ZassertIsNone)r   Ú	namespacer   r   r   r   Útest_duplicate_globalsŽ   s"    û
z&TestRlcompleter.test_duplicate_globalsN)r   r   r   r   r!   r0   r8   rG   rK   rM   ÚunittestZmockr   rY   ra   r   r   r   r   r      s   	!
r   Ú__main__)
rb   Zunittest.mockr   r/   r   r   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s    