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 )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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   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)Zwith_password)Zlazyzhttp://example.com/%20)r   r   r   Zsiblingr   childclickr   	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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$   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   )r9   r:   )r   r   r   r   addsetr(   remover2   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(   r1   r   r   len)r   r   r-   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   rB   r   r   r*   r   rC   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   ZpwZthiswillcauseafailure)r   )r   r   r   assertRaises
ValueErrorrD   r2   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)   rI   r2   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   rF   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   rR   r   r   r   r   rB   r2   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 )NrP   F)Zquery_plus_is_spacerQ   r   b+c+))r   rU   rS   r2   r   r   r    test_decode_nonplussed   s   zTestURL.test_decode_nonplussedN)__name__
__module____qualname__r!   r.   r3   r>   rA   rE   rH   rK   rN   rO   rT   rV   r   r   r   r    r      s    &$	
r   N)Z
__future__r   typingr   r   r   r   r   r1   r   commonr
   r   r   r   r   r   r   r    <module>   s   