o
    Ïó·iÛ  ã                   @   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)ÚselfZbdurlÚdurl© r!   úeC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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)Zwith_password)Zlazyzhttp://example.com/%20)r   r   r   Zsiblingr   Ú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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   )r>   r?   )r   r   r   r   ÚaddÚsetr*   Úremover5   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*   r4   r   r   Úlen)r   r    r0   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s"J ‚d S )N)	r   r   r   Úqueryr   r   r-   r   Úuses_netloc)r   r   r   Úreplacer   r   r   rG   r   r   r-   r   rH   r/   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   ÚpwZthiswillcauseafailure)r   )r   r   r   ÚassertRaisesÚ
ValueErrorrI   r5   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 )Nr+   ÚasText)r   r   r   ZfromTextÚdirr+   rO   r5   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)Zraise_subencoding_excu   Ã©%25Ã©Úascii)Zsubencoding)r   rL   Ú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    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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   rX   ©r   r   r   r   rG   r5   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 )NrV   F)Zquery_plus_is_spacerW   r   úb+c+))r   r[   rY   r5   r!   r!   r"   Útest_decode_nonplussedÝ   s   ÿzTestURL.test_decode_nonplussedN)Ú__name__Ú
__module__Ú__qualname__r#   r1   r6   rC   rF   rJ   rN   rQ   rT   rU   rZ   r\   r!   r!   r!   r"   r      s    &$	
r   N)Ú
__future__r   Útypingr   r   r   r   r   r4   r   Úcommonr
   r   r   r   r!   r!   r!   r"   Ú<module>   s   ÿ