B
    .(b              
   @   sp  d dl mZ d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 ejdddd	d
 Zdd Zdd Zdd Zdd Zdd Zejdeeegdd Zejdeeegdd Zejdddd dddd dd dd d!d idd"d d#d$digd%d& Zejd'd$d(d id)d d)d dd*d+id*did,d-d igd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 ZdS )8    )unicode_literalsN)Mock)DocSpanToken)
UnderscorefunctionT)ZscopeZautousec               c   s   d V  i t _i t _i t _d S )N)r   doc_extensionsspan_extensionstoken_extensions r   r   N/home/dcms/DCMS/lib/python3.7/site-packages/spacy/tests/doc/test_underscore.pyclean_underscore
   s    r   c              C   sF   t  } | | _ttj| }|j| ks&t|jd ks4t|jd ksBtd S )N)r   docr   r	   _docAssertionError_start_end)r   uscorer   r   r   test_create_doc_underscore   s    r   c              C   sV   t  } | | _i | _dtjd< ttj| | _| jjdks:td| j_| jjdksRtd S )N)FNNNhelloFT)r   r   	user_datar   r	   _r   r   )r   r   r   r   #test_doc_underscore_getattr_setattr   s    
r   c              C   sZ   t t  ddd} ttj| | j| jd}|j| jks6t|j| jksFt|j	| jksVtd S )Nr      )r   startend)r   r   )
r   r   r
   r   r   r   r   r   r   r   )spanr   r   r   r   test_create_span_underscore'   s    r   c              C   sn   t t  ddd} d d dd dd ftjd< ttj| | j| jd| _| jjd	ksRtd
| j_| jjdksjtd S )Nr   r   )r   r   r   c             S   s
   | j dfS )Nhi)r   )sr   r   r   <lambda>6       z4test_span_underscore_getter_setter.<locals>.<lambda>c             S   s   t | d|S )Nr   )setattr)r    valuer   r   r   r!   7   r"   r   )r   r   )r   r      )r%   r   )r   r   r
   r   r   r   r   r   )r   r   r   r   "test_span_underscore_getter_setter1   s    r&   c              C   sR   t t  ddd d} d | jd d ftjd< ttj| | jd| _| j dksNtd S )N   c             S   s   dS )Ncheeser   )tokenr   r   r   r!   C   r"   z.test_token_underscore_method.<locals>.<lambda>)r   idx
say_cheeser   )r   r(   )r   r+   r   r   r*   r   r   r   )r)   r   r   r   test_token_underscore_methodB   s    r,   objc             C   s<   d}| j |dd | |s t| | | |r8td S )NZto_be_removedF)default)set_extensionZhas_extensionr   remove_extension)r-   Zext_namer   r   r   $test_doc_underscore_remove_extensionI   s
    
r1   c          	   C   s6   | j dd d tt | j dd d W d Q R X d S )Ntest)r.   )r/   pytestraises
ValueError)r-   r   r   r   test_underscore_raises_for_dupR   s    r6   invalid_kwargsc               C   s   d S )Nr   r   r   r   r   r!   \   r"   r!   )gettersetterc               C   s   d S )Nr   r   r   r   r   r!   ]   r"   )r.   methodr8   r9   c               C   s   d S )Nr   r   r   r   r   r!   ^   r"   c               C   s   d S )Nr   r   r   r   r   r!   _   r"   )r.   r:   r8   c          	   C   s.   d| d< t t tjd|  W d Q R X d S )NTforcer2   )r2   )r3   r4   r5   r   r/   )r7   r   r   r   "test_underscore_raises_for_invalidY   s    r<   valid_kwargsc               C   s   d S )Nr   r   r   r   r   r!   l   r"   c               C   s   d S )Nr   r   r   r   r   r!   m   r"   r.   r   r:   c               C   s   d S )Nr   r   r   r   r   r!   p   r"   c             C   s   d| d< t jd|  d S )NTr;   r2   )r2   )r   r/   )r=   r   r   r   test_underscore_accepts_validi   s    r>   c             C   s   t jdg d t | dgd}t | dgd}|jjd t|jjdksLt|jjd dks`tt|jjdksttd	d
g|j_|jjd t|jjdkstt|jjdkstdS )zFTest that mutable default arguments are handled correctly (see #2581).mutable)r.   one)wordstwofoor%   r   barbaz   N)r   r/   r   r?   appendlenr   )en_vocabZdoc1Zdoc2r   r   r   %test_underscore_mutable_defaults_listx   s    rJ   c             C   s  t jdi d t| dgdd }t| dgdd }d|jjd< t|jjd	ksRt|jjd dksftt|jjdksztd
|jjd< t|jjd	kst|jjd d
kstg |jjd< |jjd d t|jjdkst|jjd dgkstt|jjdkstdS )zFTest that mutable default arguments are handled correctly (see #2581).r?   )r.   r@   )rA   r   rB   rD   rC   r%   rE   xyr   N)r   r/   r   r   r?   rH   r   rG   )rI   Ztoken1Ztoken2r   r   r   %test_underscore_mutable_defaults_dict   s    rM   c             C   st   t jddd t | ddgd}dt|ks.tdt|jks@tdt|d jksVtdt|dd	 jksptdS )
zTest that dir() correctly returns extension attributes. This enables
    things like tab-completion for the attributes in doc._.Ztest_dirN)r.   r   world)rA   r   r   r   )r   r/   dirr   r   )rI   r   r   r   r   test_underscore_dir   s    rP   c             C   sV   ddd}t jd|d t | ddgd	}|jd
ks6t|jjjdd d
ksRtdS )z[Test that docstrings are available for extension methods, even though
    they're partials.r%   r   c             S   s   ||fS )zI am a docstringr   )r   Zarg1Zarg2r   r   r   test_method   s    z.test_underscore_docstring.<locals>.test_methodtest_docstrings)r:   r   rN   )rA   zI am a docstringz. N)r%   r   )r   r/   __doc__r   r   rR   rsplit)rI   rQ   r   r   r   r   test_underscore_docstring   s
    
rV   )
__future__r   r3   Zmockr   Zspacy.tokensr   r   r   Zspacy.tokens.underscorer   Zfixturer   r   r   r   r&   r,   markZparametrizer1   r6   r<   r>   rJ   rM   rP   rV   r   r   r   r   <module>   s<   		
	
	
