o
    Gï÷_Û  ã                   @   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J ‚|jdksJ ‚|jdksJ ‚|jdks!J ‚|jdks(J ‚t  t¡}|jdks4J ‚|jdks;J ‚|jdksBJ ‚|jd	ksIJ ‚|jd
ksPJ ‚| 	d¡dgksZJ ‚|j
dksaJ ‚|jdkshJ ‚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ÚhostÚportr   ÚfragmentÚ	TOTAL_URLÚgetr   Úuserinfo)ÚselfÚ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   s^  t  t¡}| d¡jd dksJ ‚| d¡jd dksJ ‚| ¡ |ks%J ‚| ¡ |u s-J ‚| d¡jd dks9J ‚|jdks@J ‚d|jv sGJ ‚d| ¡ jvsPJ ‚| 	¡ j
dksYJ ‚d	| ¡ jd
 v sdJ ‚|jdd�tksnJ ‚|jssJ ‚|jsxJ ‚||j ¡ ks�J ‚t jtdd�}||jjdd�ks“J ‚tt  t¡ d	¡ƒdks¡J ‚|d
kr§J ‚|d
ks­J ‚d S )Nzte%téÿÿÿÿz	../test2%ú/r   r   r   z	fr%C3%A9gú r	   T)Úwith_password)Úlazyzhttp://example.com/%20)r   r   r   Úsiblingr   ÚchildÚclickr   Ú	normalizeÚto_urir   Úto_iriÚto_textÚabsoluteÚrootedÚencoded_urlÚ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J ‚d S )NzDecodedURL(url=ú))r   r   r   ÚreprÚ_url©r   r!   r"   r"   r#   Ú	test_reprM   s   
"zTestURL.test_reprc                 C   sT  t  t¡}| d¡dgksJ ‚| dd¡}| d¡dgksJ ‚| dd¡}| d¡dgks/J ‚t | ¡ d�}| d¡dgks@J ‚| d¡}| d¡g ksNJ ‚t  d¡}| d¡d	d
gks^J ‚| dd¡ d¡dgkslJ ‚t  d¡}| d¡t  d¡ks}J ‚|jddd�t  d¡ks‹J ‚|jddd�t  d¡ks™J ‚|jdddd�t  d¡ks¨J ‚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   )rE   rF   )r   r   r   r   ÚaddÚsetr.   Úremover<   r"   r"   r#   Útest_query_manipulationR   s8   


ÿ
ÿ
ÿ
ÿÿzTestURL.test_query_manipulationc                 C   sÈ   t  t¡}t  t¡}t  t¡}| ¡ }||ksJ ‚||ksJ ‚||ks%J ‚|d us+J ‚||jks2J ‚ttt f }i }|||< |||< t|ƒdksJJ ‚|||< t|ƒdksVJ ‚|||< t|ƒdksbJ ‚d S )Nr	   r   é   )	r   r   r   r   r.   r;   r   r   Úlen)r   r!   r7   ÚburlÚdurl_uriÚAnyURLÚ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s"J ‚d S )N)	r   r   r   Úqueryr   r   r2   r   Úuses_netloc)r   r   r   Úreplacer   r   r   rR   r   r   r2   r   rS   r6   r"   r"   r#   Útest_replace_roundtrip“   s   
÷zTestURL.test_replace_roundtripc                 C   sF   t  t¡}|  t¡� |jdd� W d   ƒ d S 1 sw   Y  d S )N)r   ÚpwÚthiswillcauseafailure)r   )r   r   r   ÚassertRaisesÚ
ValueErrorrT   r<   r"   r"   r#   Útest_replace_userinfo¥   s   
ÿ
ÿøzTestURL.test_replace_userinfoc                 C   sT   t  t¡}|t  t¡ksJ ‚dt|ƒv sJ ‚dt|ƒvsJ ‚| ¡ | ¡ ks(J ‚d S )Nr0   ÚasText)r   r   r   ÚfromTextÚdirr0   r[   r<   r"   r"   r#   Útest_twisted_compat²   s
   
zTestURL.test_twisted_compatc                 C   sn   t dƒdksJ ‚t dƒdksJ ‚|  t¡� t ddd� W d   ƒ n1 s&w   Y  t ddd�dks5J ‚d S )	Nu   abcdÃ©%C3%A9Ã©fgu   abcdÃ©Ã©Ã©fgu   abcdÃ©%C3Ã©fgT)Úraise_subencoding_excu   Ã©%25Ã©Úascii)Úsubencoding)r   rX   Ú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J ‚|j|jksJ ‚|jdks&J ‚d S )Nu   /tÃ«st)u   tÃ«st)r   r   r   r,   r   r   )r   r!   Ú	durl_destÚclickedr"   r"   r#   Útest_click_decoded_urlÌ   s   


zTestURL.test_click_decoded_urlc                 C   s>   t  d¡}|jdksJ ‚| d¡dgksJ ‚|jdksJ ‚d S )Nú/x+y%2B?a=b+c%2B©zx+y+r   úb c+))r   ri   ©r   r   r   r   rR   r<   r"   r"   r#   Útest_decode_plusÖ   s   
zTestURL.test_decode_plusc                 C   sB   t jddd�}|jdksJ ‚| d¡dgksJ ‚|jdksJ ‚d S )Nrg   F)Úquery_plus_is_spacerh   r   úb+c+))r   rm   rj   r<   r"   r"   r#   Útest_decode_nonplussedÝ   s   ÿzTestURL.test_decode_nonplussedN)Ú__name__Ú
__module__Ú__qualname__r$   r8   r=   rJ   rQ   rU   rZ   r^   rc   rf   rk   rn   r"   r"   r"   r#   r      s    &$	
r   N)Ú
__future__r   Útypingr   r   r   r   r   r;   r   Úcommonr
   r   r   r   r"   r"   r"   r#   Ú<module>   s   ÿ