U
    \s                     @   sL   d dl mZ ddlmZ ddlmZ ddlmZ dZdZ	G d	d
 d
eZ
dS )    )unicode_literals   )
DecodedURL)_percent_decode   )HyperlinkTestCasezhttp://example.com/#ua   https://%75%73%65%72:%00%00%00%00@xn--bcher-kva.ch:8080/a/nice%20nice/./path/?zot=23%25&zut#frégc                   @   sd   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S )TestURLc                 C   s   t t}|jdkst|jdks&t|jdks4t|jdksBt|jdksPtt t	}|jdksht|jdksvt|jdkst|jd	kst|jd
kst|
ddgkst|jdkst|jdkstd S )NZhttpzexample.comP   ) r
   Zhttpsu
   bücher.chi  )az	nice nice.pathr
   u   frégzot23%user)r   z    )r   	from_text	BASIC_URLschemeAssertionErrorhostportr   fragment	TOTAL_URLgetr   userinfo)selfZbdurldurl r   A/usr/lib/python3/dist-packages/hyperlink/test/test_decoded_url.pytest_durl_basic   s    

zTestURL.test_durl_basicc                 C   sh  t t}|djd dks"t|djd dks:t| |ksJt| |ksZt|djd dksrt|jdkstd|jkstd|	 jkst|
 jdkstd	| jd
 kst|jddtkst|jst|jst||j kstt jtdd}||jjddks*ttt td	dksHt|d
krVt|d
ksdtd S )Nzte%tz	../test2%/r
   r   r   z	fr%C3%A9g r   T)Zwith_password)Zlazyzhttp://example.com/%20)r   r   r   Zsiblingr   r   Zchildclickr   Z	normalizeto_urir   Zto_irito_textZabsoluterootedZencoded_urlZget_decoded_urlstrr   r   r   durl2r   r   r   test_passthroughs#   s(    


zTestURL.test_passthroughsc                 C   s,   t t}t|dt|j d ks(td S )NzDecodedURL(url=))r   r   r   repr_urlr   r   r   r   r   r   	test_reprD   s    
zTestURL.test_reprc                 C   sZ  t t}|ddgkst|dd}|ddgks>t|dd}|ddgks^tt | d}|ddgkst|d}|dg kstt d}|dd	d
gkst|ddddgkstt d}|dt dkst|jdddt dkst|jdddt dks6t|jddddt dksVtd S )Nr   r   r"   Zspacezspa%ed)Zurlz/?%61rg=b&arg=cargbcdu.   https://example.com/a/b/?fóó=1&bar=2&fóó=3u   fóózhttps://example.com/a/b/?bar=21)valueu&   https://example.com/a/b/?bar=2&fóó=3r   )limitr   )r5   r6   )	r   r   r   r   r   addsetr$   remover.   r   r   r   test_query_manipulationH   s$    



zTestURL.test_query_manipulationc                 C   s   t t}t t}t t}| }||ks2t||ks>t||ksJt|d ksVt||jksdti }|||< |||< t|dkst|||< t|dkst|||< t|dkstd S )Nr   r      )r   r   r   r   r$   r   r-   len)r   r   r)   ZburlZdurl_uriZdurl_mapr   r   r   test_equality_and_hashabilitya   s"    


z%TestURL.test_equality_and_hashabilityc                 C   sH   t t}|j|j|j|j|j|j|j	|j
|j|jd	}||ksDtd S )N)	r   r   r   queryr   r   r&   r   uses_netloc)r   r   r   replacer   r   r   r>   r   r   r&   r   r?   r   r(   r   r   r   test_replace_roundtrip{   s    

zTestURL.test_replace_roundtripc              	   C   s6   t t}| t |jdddgd W 5 Q R X d S )Nr   ZpwZthiswillcauseafailure)r   )r   r   r   assertRaises
ValueErrorr@   r.   r   r   r   test_replace_userinfo   s    
zTestURL.test_replace_userinfoc                 C   sT   t t}|t tkstdt|ks,tdt|ks<t| | ksPtd S )Nr%   asText)r   r   r   ZfromTextr   dirr%   rE   r.   r   r   r   test_twisted_compat   s
    
zTestURL.test_twisted_compatc                 C   s   t ddddkstd S )Nz%00FZsubencoding    )r   r   r   r   r   r   test_percent_decode_bytes   s    z!TestURL.test_percent_decode_bytesc              	   C   sn   t ddkstt ddks t| t t ddd W 5 Q R X t dddd	ksVtt d
ddd
ksjtd S )Nu   abcdé%C3%A9éfgu   abcdéééfgu   abcdé%C3éfgT)Zraise_subencoding_excza%00bFrH   s   a bu   é%25éascii)r   r   rB   UnicodeDecodeErrorrJ   r   r   r   test_percent_decode_mixed   s    z!TestURL.test_percent_decode_mixedc                 C   sP   t t}t d}||}|j|jks.t|j|jks>t|jdksLtd S )Nu   /tëst)u   tëst)r   r   r   r#   r   r   r   )r   r   Z	durl_destZclickedr   r   r   test_click_decoded_url   s    


zTestURL.test_click_decoded_urlN)__name__
__module____qualname__r   r*   r/   r:   r=   rA   rD   rG   rK   rN   rO   r   r   r   r   r      s   !r   N)Z
__future__r   r
   r   r-   r   commonr   r   r   r   r   r   r   r   <module>   s   