B
    u9a1  ã               @   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.7/test_rlcompleter.pyr      s   r   c               @   sZ   e Z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>.BN)r   r   r   r   r   r   r   ÚB   s   r   )r   )r   ÚlistÚ
assertTruer   Zuse_main_nsZ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>$   s    z7TestRlcompleter.test_global_matches.<locals>.<listcomp>Ústc             S   s   g | ]}|  d ¡r|d ‘qS )r%   r    )r!   )r"   r#   r   r   r   r$   &   s    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¡}x|D ]}|  | d¡|¡ qòW |  	d|¡ |  	d|¡ t
jtdtdd> |   | j d¡dg¡ |   | j d¡dd„ ttƒD ƒ¡ W d Q R X d S )Nzstr.sc             S   s    g | ]}|  d ¡rd |¡‘qS )Úszstr.{}()r!   Úformat)r"   r#   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   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 )r+   zegg.{}()r!   r,   )r"   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   s2    

z!TestRlcompleter.test_attr_matchesc             C   sJ   G dd„ dƒ}|ƒ }t  t|d¡}|  | dd¡d¡ |  |jd¡ d S )Nc               @   s   e Zd ZdZedd„ ƒZdS )z3TestRlcompleter.test_excessive_getattr.<locals>.Foor   c             S   s   |  j d7  _ d S )Nr   )Úcalls)r   r   r   r   ÚbarW   s    z7TestRlcompleter.test_excessive_getattr.<locals>.Foo.barN)r   r   r   r2   Úpropertyr3   r   r   r   r   ÚFooU   s   r5   )Úfzf.br   zf.barr   )r   r   r   r&   r   r2   )r   r5   r6   r   r   r   r   Útest_excessive_getattrS   s
    z&TestRlcompleter.test_excessive_getattrc             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)r3   N)r   r   r   Ú	__slots__r   r   r   r   r5   c   s   r5   )r6   zf.r   zf.bar)r   r   r   r&   r   )r   r5   r   r   r   r   Útest_uncreated_attr`   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   zassert ZanÚpaÚpassZFaÚFalseÚelzelif ÚelseÚtrztry:)r   r   r&   r   )r   r   r   r   r   Útest_completeh   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>z   ó    z8TestRlcompleter.test_duplicate_globals.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   rD   |   rE   )r?   ÚassertÚtryÚ
memoryviewÚEllipsisr?   r   r   rF   zassert rG   ztry:rH   rI   z	Ellipsis()r   r   r&   r   ZassertIsNone)r   Ú	namespacer   r   r   r   Útest_duplicate_globalsv   s     
z&TestRlcompleter.test_duplicate_globalsN)r   r   r   r   r   r*   r1   r7   r9   ÚunittestZmockr   rC   rK   r   r   r   r   r      s   	!r   Ú__main__)
rL   Zunittest.mockr   r)   r   r   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s    