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.comP   ) 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sJ t jtdd}||jjddksJ tt td	dksJ |d
krJ |d
ksJ d S )Nzte%tz	../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sJ |jdddt dksJ |jddddt dksJ 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   