o
    /hN                     @   s   d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
Z
ddlmZmZmZmZmZ G dd dZG dd	 d	ZG d
d dZG dd dZdS )zTestcases for cssutils.util    N)Message)mock)Base	LazyRegexListSeq_defaultFetcher_readUrlc                   @   s   e Zd Zdd ZdS )TestListSeqc                 C   s  t  }dt|ksJ tt |d W d   n1 s w   Y  tt |dd W d   n1 s;w   Y  |jd |jd dt|ksTJ dd|v u s\J d|d ksdJ d|d kslJ |d= dt|kswJ dd|v u sJ |D ]}d|ksJ qdS )zutil.ListSeqr      N   TF)r   lenpytestraisesNotImplementedErrorappend__setitem__seq)selflsx r   L/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_util.pytest_all   s(   zTestListSeq.test_allN)__name__
__module____qualname__r   r   r   r   r   r	      s    r	   c                   @   s   e Zd Zdd Zdd ZdS )TestBasec                 C   sP   t  }dddd}t| D ]\}}|||ksJ t ||ks%J qdS )zBase._normalize()u!   abcdefg abcdefg äöüß€ aöüzgaga\ 
0123456789)u!   abcdefg ABCDEFG äöüß€ AÖÜz
\ga\Ga\\\ r   N)r   listitems
_normalize)r   bteststestexpr   r   r   test_normalize0   s   zTestBase.test_normalizec                 C   s2  t  }g d}|D ]\}}}}dd }|t|}|r6t|D ]\}	}
d|
d kr5dd|
d |
d	 f||	< qd
|kr@||}nFd|krL|j|dd}n:d|krX|j|dd}n.d|krd|j|dd}n"d|krp|j|dd}nd|kr||j|dd}n
d|kr||d}ddd |D }||ksJ q	dS )zBase._tokensupto2()))defaulta[{1}]({2}) { } NOTza[{1}]({2}) { }F)r&   r'   za[{1}]func({2}) { }T)blockstartonlya[{1}]({2}) { NOTza[{1}]({2}) {F)r(   r)   za[{1}]func({2}) {T)propertynameendonlya[(2)1] { }2 : a;za[(2)1] { }2 :F)r*   r+   za[func(2)1] { }2 :T)propertyvalueendonly,a{;{;}[;](;)}[;{;}[;](;)](;{;}[;](;)) 1; NOTz(a{;{;}[;](;)}[;{;}[;](;)](;{;}[;](;)) 1;F)r,   r-   z8a{;{;}[;]func(;)}[;{;}[;]func(;)]func(;{;}[;]func(;)) 1;T)funcendonlya{[1]}([3])[{[1]}[2]([3])]) NOTza{[1]}([3])[{[1]}[2]([3])])F)r.   r/   z#a{[1]}func([3])[{[1]}[2]func([3])])T)selectorattendonly[a[()]{()}([()]{()}())] NOTz[a[()]{()}([()]{()}())]F)r0   r1   z/[a[func()]{func()}func([func()]{func()}func())]T)withstarttoken [za];xz[a];Fc                 S   s   dd | D S )Nc                 S   s   g | ]}d |ddfqS )TYPEr   r   ).0vr   r   r   
<listcomp>x   s    z?TestBase.test_tokenupto.<locals>.maketokens.<locals>.<listcomp>r   )	valuelistr   r   r   
maketokensv   s   z+TestBase.test_tokenupto.<locals>.maketokens(r
   FUNCTIONzfunc(r      r&   r(   T)r(   r*   )r*   r,   )r,   r.   )r.   r0   )r0   r2   )CHAR[r   r    c                 S   s   g | ]}|d  qS )r
   r   )r4   tr   r   r   r6          z+TestBase.test_tokenupto.<locals>.<listcomp>N)r   r   	enumerate_tokensupto2join)r   r!   r"   typvaluesr$   paransasfuncr8   tokensir?   	restokensresr   r   r   test_tokenupto?   s6   /zTestBase.test_tokenuptoN)r   r   r   r%   rK   r   r   r   r   r   /   s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )Test_readUrlz
needs mockc                 C   sj  d}dd }dddddd  fd	d
d  fddd dfdddi}t| D ]\}}t|||d|ks7J q'i dddddddd dffddddddddd dffd dddd  ffd!d"dd#dd$ddddd dffdd%dd&ddddd dffd dddd  ffd!d'dd(di d)ddddd dffdd*dd+ddddd dffd dddd  ffd!d,dd-ddddd dffdd.dd/ddddd dffd dddd  ffd!d0d1d2d3dddd dffd4d5d6i d7d8dddd dffd9dddd  ffd:d;d<dddd= dffd>dddd=  ffd?dddd d@ffdAdddd d@ffdBdddd= d@ffdBdCdDdEdFdddd dffdGdHdIdddd  ffdJdKddLdMdNdOdddd  ffdPdddd dffdQi}t| D ]\\}}}}t|||||dR|ksJ qdS )Szutil._readUrl()http://example.com/test.cssc                    s    fdd}|S )Nc                        S Nr   urlrr   r   fetcher      z@Test_readUrl.test_readUrl.<locals>.make_fetcher.<locals>.fetcherr   )rS   rT   r   rR   r   make_fetcher   s   z/Test_readUrl.test_readUrl.<locals>.make_fetcherN)NNN)Nr>   )utf-8   r>      €)rW   rX   rY   rW   )rW   r
   rY   
ISO-8859-1   äz
iso-8859-1)rZ   r
   r[   )ASCII   a)r\   r
   a)rT   )latin1asciiutf-16    )r_   r   r>   )r_   r`   rb      123)r_   r   123r_   r`   rb   )r_   r   r[   )r_   r`   rb   r]   )r_   r   r^   )r_   r`   rb      @charset "ascii";)r_   r   @charset "latin1";   @charset "utf-8";ä)r_   r      @charset "latin1";ä)r_   r      @charset "latin1";Ã¤)r_   NN)r_   NNrc   )r_   NNre   )r_   NNr]   )r_   NNri   )r_   r`   N)r_   r`   rn   )r_   r`   ro   )r_   r`   rp   )r_   r`   rq   )r_   Nra   )r_   Nrd   )r_   Nrg   )r_   Nrh   )Nr`   )r_   rc   )r_   r
   r>   )Nr`   )r_   re   )r_   r
   rf   )r_   r
   r[   )Nr`   )r_   r]   )r_   r
   r^   )Nr`   )r_   ri   )r_   r
   rj   )r_   r
   rl   )r_   r
   rm   )Nr`   )Ns   @charset "latin1";)r_   r   rj   rl   )r_   r   rl   )r_   r   rm   	utf-8-sig)rr   r   r[   )rr   r   rk   )Nr_   rn   )r_      r>   )Nr_   ro   )r_   rs   rf   )r_   rs   r[   )Nr_   rp   )r_   rs   r^   )r_   rs   u   Ã¤)NNrn   )NNro   )rW   rX   rf   )NNrp   )rW   rX   r^   )rW   rX   r[   )rW   rX   N)overrideEncodingparentEncodingrT   )encoder   r   r   )r   rQ   rV   r"   rS   r$   overrideparentr   r   r   test_readUrl   s8  	
 !"$).45678:?DJKLMOTY_`abdinty~   
                   !  "  1zTest_readUrl.test_readUrlc              	      s"  G dd d d" fdd	}d}dd  fdd  fd	d  fd
d  fddi}d}t| D ]\\}}}tj|||||ddd }|||ksMJ q0tj|||ddddd }tt || W d   n1 sqw   Y  tdgftj	j
dgftj	j
dgfd}t| D ]/\}\}	}
tj||||	|
dddd }t|	 || W d   n1 sw   Y  qd}tj	jdddi dgftj	jdddi dgfd }t| D ]0\}\}	}
tj||||	|
ddd!d }t|	 || W d   n	1 s	w   Y  qdS )#zutil._defaultFetcherc                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )z2Test_readUrl.test_defaultFetcher.<locals>.Responsezurllib2.Reponse mockNc                 S   sB   || _ t }||d< | | _|dd | _|| _|| _|| _d S )Nzcontent-typecharset)	rQ   r   get_content_typemimetype	get_paramrz   text	exceptionargs)r   rQ   contenttypecontentr   r   mr   r   r   __init__p  s   

z;Test_readUrl.test_defaultFetcher.<locals>.Response.__init__c                 S   s   | j S rO   rP   r   r   r   r   geturl~  s   z9Test_readUrl.test_defaultFetcher.<locals>.Response.geturlc                    s(   | j | j G  fddd}| S )Nc                       s.   e Zd ZfddZd fdd	ZeZeZdS )zETest_readUrl.test_defaultFetcher.<locals>.Response.info.<locals>.Infoc                    rN   rO   r   r   )r|   r   r   gettype  rU   zMTest_readUrl.test_defaultFetcher.<locals>.Response.info.<locals>.Info.gettypeNc                    rN   rO   r   )r   name)rz   r   r   getparam  rU   zNTest_readUrl.test_defaultFetcher.<locals>.Response.info.<locals>.Info.getparamrO   )r   r   r   r   r   r{   get_content_charsetr   rz   r|   r   r   Info  s
    r   )r|   rz   )r   r   r   r   r   info  s   z7Test_readUrl.test_defaultFetcher.<locals>.Response.infoc                 S   s   | j s| jS | j | j rO   )r   r~   r   r   r   r   r   read  s   z7Test_readUrl.test_defaultFetcher.<locals>.Response.read)NN)r   r   r   __doc__r   r   r   r   r   r   r   r   Responsem  s    
r   Nc                    s    fdd}|S )Nc                     s   r  dS )Nr   r   r   )ignored)r   r   r   r   r   rQ   r   r   r     s
   
z<Test_readUrl.test_defaultFetcher.<locals>.urlopen.<locals>.xr   )rQ   r   r   r   r   r   r   )r   r   r   r   rQ   r   urlopen  s   z1Test_readUrl.test_defaultFetcher.<locals>.urlopenzurllib.request.urlopenztext/cssrY   ztext/css;charset=utf-8rW   )ztext/css;charset=asciir^   )r`   r^   rM   )newc                 S      t | S rO   r   rP   r   r   r   do     z,Test_readUrl.test_defaultFetcher.<locals>.doz	text/htmlr^   c                 S   r   rO   r   rP   r   r   r   r     r   zinvalid value for urlurlerrorioerror)1z	mailto:e4zhttp://xr   c                 S   r   rO   r   rP   r   r   r   r     r   zurllib.request.Requestui  zserver errori  z	not found)e2e3c                 S   r   rO   r   rP   r   r   r   r     s   )NNNN)rv   r   r   r   patchr   r   
ValueErrorurlliberrorURLError	HTTPError)r   r   urlopenpatchr"   rQ   r   r   r$   r   r   r   urlrequestpatchr   r   r   test_defaultFetcherj  sZ   ,
	






z Test_readUrl.test_defaultFetcherN)r   r   r   r   ry   r   r   r   r   r   rL      s
     UrL   c                   @   s   e Zd 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d Zdd Zdd Zd d! Zd"d# Zd$S )%TestLazyRegexz"Tests for cssutils.util.LazyRegex.c                 C   s   t d| _d S Nzf.o)r   lazyrer   r   r   r   setup_method  s   zTestLazyRegex.setup_methodc                 C   s.   g d}|D ]}t | j|sJ d| qd S )N)searchmatchsplitsubsubnfindallfinditerpatternflagsgroups
groupindexzexpected %r public attribute)hasattrr   )r   methodsmethodr   r   r   test_public_interface  s   z#TestLazyRegex.test_public_interfacec                 C   s.   | j jd u sJ | j   | j jd usJ d S rO   )r   matcherensurer   r   r   r   test_ensure  s   
zTestLazyRegex.test_ensurec                 C   s0   |  dd u s	J |  d}| dksJ d S Nbarfoobarfoo)r   groupr   r   r   r   r   test_calling  s   
zTestLazyRegex.test_callingc                 C   4   | j dd u s
J | j d}| dksJ d S r   )r   r   r   r   r   r   r   test_matching     zTestLazyRegex.test_matchingc                 C   s2   | j ddd u sJ | j dddd u sJ d S )Nr   r
   r   r   )r   r   r   r   r   r   &test_matching_with_position_parameters  s   z4TestLazyRegex.test_matching_with_position_parametersc                 C   r   )Nrafuubarrafoobarr   r   r   r   r   r   r   r   test_searching  r   zTestLazyRegex.test_searchingc                 C   sP   | j ddd u sJ | j dddd u sJ | j dd}| dks&J d S )Nr   r;   r   rs   rafoofuobarfuor   r   r   r   r   'test_searching_with_position_parameters  s   z5TestLazyRegex.test_searching_with_position_parametersc                 C   s6   | j dg dksJ | j ddddgksJ d S )Nrafoobarfoobaz)rar   bazr
   r   	barfoobaz)r   r   r   r   r   r   
test_split  s   zTestLazyRegex.test_splitc                 C   s   | j dddgksJ d S )Nrafoobarfuobazr   r   )r   r   r   r   r   r   test_findall   s   zTestLazyRegex.test_findallc                 C   s*   | j d}dd |D ddgksJ d S )Nr   c                 S   s   g | ]}|  qS r   )r   )r4   r   r   r   r   r6   %  r@   z/TestLazyRegex.test_finditer.<locals>.<listcomp>r   r   )r   r   )r   resultr   r   r   test_finditer#  s   zTestLazyRegex.test_finditerc                 C   s4   | j dddksJ | j dd ddksJ d S )Nr   foofoobarbarc                 S      dS Nr   r   r   r   r   r   <lambda>)      z(TestLazyRegex.test_sub.<locals>.<lambda>bazbaz)r   r   r   r   r   r   test_sub'  s   zTestLazyRegex.test_subc                 C   s<   | j dd}|dksJ | j dd d}|dksJ d S )Nr   r   )r   r   c                 S   r   r   r   r   r   r   r   r   .  r   z)TestLazyRegex.test_subn.<locals>.<lambda>)r   r   )r   r   )r   subbedr   r   r   	test_subn+  s   zTestLazyRegex.test_subnc                 C   s0   t d}|jd u sJ |  |jdksJ d S )Nz(.)(.)r   )r   r   r   r   r   r   r   r   test_groups1  s   zTestLazyRegex.test_groupsc                 C   s4   t d}|jd u sJ |  |jddiksJ d S )Nz
(?P<foo>.)r   r
   )r   r   r   r   r   r   r   test_groupindex7  s   zTestLazyRegex.test_groupindexc                 C   s&   | j   | j jtdjksJ d S )N.)r   r   r   recompiler   r   r   r   
test_flags=  s   
zTestLazyRegex.test_flagsc                 C   s   | j jdksJ d S r   )r   r   r   r   r   r   test_patternA  s   zTestLazyRegex.test_patternN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s&    r   )r   r   urllib.errorr   urllib.parseurllib.requestemail.messager   unittestr   r   cssutils.utilr   r   r   r   r   r	   r   rL   r   r   r   r   r   <module>   s     d  V