U
    ]                     @   s   d Z zddlZW n& ek
r6   ddlm  mZ Y nX ddlZddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZ ddlm  mZ G dd dejZd	d
 Zedkre  dS )zTest certbot.display.completer.    N)reload_module)List)os)
filesystemc                       s   e Zd ZdZ fddZdd Zejdej	kddd	d
 Z
dd Zejddddd Zejddddd Zdd Z  ZS )CompleterTestz)Test certbot.display.completer.Completer.c              
      s   t t|   | jd tjkr.|  jtj7  _g | _tjD ]N}tj	
| j|}| j| t|d rrt| q:t|d W 5 Q R X q:d S )N   w)superr   setUptempdirr   seppathsstringZascii_lowercasepathjoinappendordr   mkdiropen)selfcr   	__class__ F/usr/lib/python3/dist-packages/certbot/tests/display/completer_test.pyr      s    
zCompleterTest.setUpc                 C   s   ddl m} | }t| j}t|D ].}|| j|}| || jk | j	| q&| 
| j || j|}| |d  d S Nr   )	completer)certbot.displayr   	Completerlenr   rangeZcompleter   
assertTrueremoveZassertFalseassertEqual)r   r   Zmy_completerZ	num_pathsiZ
completionr   r   r   test_complete*   s    
zCompleterTest.test_completereadlinez*Not relevant if readline is not available.)reasonc                 C   s*   t jd }d t jd< |   |t jd< d S )Nr'   )sysmodules+test_context_manager_with_unmocked_readline)r   Zoriginal_readliner   r   r   test_import_error8   s    

zCompleterTest.test_import_errorc              	   C   s\   ddl m} t| t }t }|  W 5 Q R X | t | | t | d S r   )r   r   r   r'   Zget_completerZget_completer_delimsr   r$   )r   r   Zoriginal_completerZoriginal_delimsr   r   r   r+   B   s    

z9CompleterTest.test_context_manager_with_unmocked_readlinez"certbot.display.completer.readlineT)Zautospecc                 C   s   d|_ | | d S )Nlibedit__doc__(_test_context_manager_with_mock_readliner   mock_readliner   r   r   test_context_manager_libeditO   s    z*CompleterTest.test_context_manager_libeditc                 C   s   d|_ | | d S )NzGNU readliner.   r1   r   r   r   test_context_manager_readlineT   s    z+CompleterTest.test_context_manager_readlinec              	   C   s:   ddl m} t|j_|  W 5 Q R X | |jj d S r   )r   r   enable_tab_completionparse_and_bindZside_effectr   r"   Zcalled)r   r2   r   r   r   r   r0   Y   s
    

z6CompleterTest._test_context_manager_with_mock_readline)__name__
__module____qualname__r/   r   r&   unittestZskipIfr)   r*   r,   r+   mockZpatchr3   r4   r0   __classcell__r   r   r   r   r      s   


r   c                 C   s.   t jdk	odt jk}|rdnd}t | dS )zAEnables readline tab completion using the system specific syntax.Nr-   zbind ^I rl_completeztab: complete)r'   r/   r6   )Zunused_commandr-   Zcommandr   r   r   r5   d   s    r5   __main__)r/   r'   ImportErrorZcertbot.display.dummy_readlineZdisplayZdummy_readliner   r)   r:   r;   Z	six.movesr   Zacme.magic_typingr   Zcertbot.compatr   r   Zcertbot.tests.utilZtestsutilZ	test_utilZTempDirTestCaser   r5   r7   mainr   r   r   r   <module>   s"   P