U
    Á“«jÛ  ã                   @   s`   d dl mZ d dlmZmZ ddlmZ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)ÚDictÚUnioné   )Ú
DecodedURLÚURL)Ú_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                   @   sl   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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s„t‚|jd	ks’t‚|jd
ks t‚| 
d¡dgks´t‚|jdksÂt‚|jdksÐt‚d S )NÚhttpzexample.coméP   )Ú r   Ú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"   úC/tmp/pip-unpacked-wheel-gfo0yq99/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s€t‚d|jksŽt‚d| 	¡ jks t‚| 
¡ jdks²t‚d	| ¡ jd
 ksÈt‚|jdd�tksÜt‚|jsæt‚|jsðt‚||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%téÿÿÿÿz	../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   ÚchildÚclickr   Ú	normalizeÚto_urir   Zto_iriÚto_textÚ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_reprM   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s€t‚| d¡}| d¡g ksœt‚t  d¡}| d¡d	d
gks¼t‚| dd¡ d¡dgksØt‚t  d¡}| d¡t  d¡ksút‚|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'   Úspacezspa%ed)Ú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   )r?   r@   )	r   r   r   r   r   ÚaddÚsetr+   Úremover6   r"   r"   r#   Útest_query_manipulationR   s8    


ÿÿ
ÿÿÿ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‚ttt f }i }|||< |||< t	|ƒdks”t‚|||< t	|ƒdks¬t‚|||< t	|ƒdksÄt‚d S )Nr	   r   é   )
r   r   r   r   r+   r   r5   r   r   Úlen)r    r!   r1   ZburlZdurl_uriZAnyURLZdurl_mapr"   r"   r#   Útest_equality_and_hashabilityv   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   rH   r   r   r.   r   rI   r   r0   r"   r"   r#   Útest_replace_roundtrip“   s    
÷zTestURL.test_replace_roundtripc              	   C   s0   t  t¡}|  t¡� |jdd� W 5 Q R X d S )N)r   ÚpwZthiswillcauseafailure)r   )r   r   r   ÚassertRaisesÚ
ValueErrorrJ   r6   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,   rP   r6   r"   r"   r#   Útest_twisted_compat²   s
    
zTestURL.test_twisted_compatc              	   C   sZ   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‚d S )	Nu   abcdÃ©%C3%A9Ã©fgu   abcdÃ©Ã©Ã©fgu   abcdÃ©%C3Ã©fgT)Zraise_subencoding_excu   Ã©%25Ã©Úascii)Zsubencoding)r   r   rM   ÚUnicodeDecodeError)r    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_urlc                 C   s>   t  d¡}|jdkst‚| d¡dgks,t‚|jdks:t‚d S )Nú/x+y%2B?a=b+c%2B©zx+y+r   úb c+))r   rY   ©r   r   r   r   r   rH   r6   r"   r"   r#   Útest_decode_plusÖ   s    
zTestURL.test_decode_plusc                 C   sB   t jddd�}|jdkst‚| d¡dgks0t‚|jdks>t‚d S )NrW   F)Zquery_plus_is_spacerX   r   úb+c+))r   r\   rZ   r6   r"   r"   r#   Útest_decode_nonplussedÝ   s     ÿzTestURL.test_decode_nonplussedN)Ú__name__Ú
__module__Ú__qualname__r$   r2   r7   rD   rG   rK   rO   rR   rU   rV   r[   r]   r"   r"   r"   r#   r      s   &$	
r   N)Ú
__future__r   Útypingr   r   r   r   r   r5   r   Úcommonr
   r   r   r   r"   r"   r"   r#   Ú<module>   s   ÿ