o
    /h@                     @   sp   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ZddlZddl	m
Z
 ejdd ZG dd	 d	e
jZdS )
z)Testcases for cssutils.css.CSSCharsetRule    N)mock   )basetestc                 C   s   |  tdtj  d S )Nser)setattrcssutils	serializeCSSSerializer)monkeypatch r   P/var/www/html/myenv/lib/python3.10/site-packages/cssutils/tests/test_cssutils.py
serializer   s   r   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
ejddd ZdS )TestCSSutilszr@import "import/import2.css";
.import {
    /* ./import.css */
    background-image: url(images/example.gif)
    }c                 C   s@  t j| jddd}t|t jjsJ |jdu sJ | j |jks#J d|j	ks*J d|j
jks2J d|jks9J | j |jksCJ |jd }d|jksOJ |j}t|t jjs[J td}t j|}t j| j|d	}||jksuJ |jd }d|jksJ |j}t|t jjsJ |jd
ksJ ddd}| | dS )zcssutils.parseString()zhandheld, screenzfrom stringmediatitleNutf-8r   import/import2.css
import.css)href  @import "../import3.css";
@import "import-impossible.css" print;
.import2 {
    /* sheets/import2.css */
    background: url(http://example.com/images/example.gif);
    background: url(//example.com/images/example.gif);
    background: url(/images/example.gif);
    background: url(images2/example.gif);
    background: url(./images2/example.gif);
    background: url(../images/example.gif);
    background: url(./../images/example.gif)
    }za {
    color: red
    }z!a {
    color: rgb(1, 2, 3)
    })a {color: red}za {color: rgb(1,2,3)})r   parseStringexp
isinstancecssCSSStyleSheetr   encodecssTextencodingr   	mediaTextr   cssRules
styleSheetr   get_sheet_filenamehelperpath2url
do_equal_p)selfsirirsr   testsr   r   r   test_parseString   s6   


zTestCSSutils.test_parseStringc           
      C   s  t d}tj|}tj||ddd}t|tjjsJ t	j
dr,|jds+J n|jds4J |jds<J d	|jksCJ d|jjksKJ d|jksRJ | j |jks\J |jd
 }d|jkshJ |j}t|tjjstJ |jdks{J |tjt t d}tj|ddd}t|tjjsJ t	j
dr|jdsJ n|jdsJ |jdsJ d	|jksJ d|jjksJ d|jksJ | j |jksJ |jd
 }d|jksJ |j}t|tjjsJ |jdksJ d}td\}}t|d}	|	|d	 |	   t!"t# t|d W d   n	1 s*w   Y  tj|dd}t|tjjs@J |jd j$dksKJ tj|d	d}t|tjjs\J |jd j$dksgJ d}t%&|dd}	|	| |	   t!"t# t|d W d   n	1 sw   Y  tj|dd}t|tjjsJ |jd j$dksJ t!"t# t|d	 W d   n	1 sw   Y  zt'| W dS  t(y   Y dS w )zcssutils.parseFile()r   screenz	from file)r   r   r   javazfile:zfile:/z/sheets/import.cssr   r   r   r   r   u#   a:after { content: "羊蹄€†" }z_cssutilstest.csswbasciiN
iso-8859-1r   r   za:afteru0   @charset "iso-8859-1"; a:after { content: "ä" }w))r   r#   r   r$   r%   	parseFiler   r   r   sysplatform
startswithr   endswithr   r   r    r   r   r   r   r!   r"   chdirospathdirname__file__tempfilemkstempfdopenwriteclosepytestraisesUnicodeDecodeErrorselectorTextcodecsopenremoveOSError)
r'   r
   namer   r(   r)   r*   r   fdtr   r   r   test_parseFileK   s   




zTestCSSutils.test_parseFilec           	      C   s  t d}tj|}tj|ddd}t|tjjsJ ||j	ks#J | j
 |jks-J d|jks4J d|jjks<J d|jksCJ |jd }|jdjd j}|d	ksXJ |jd }d
|j	ksdJ |j}|jdksnJ |jd }d|j	kszJ |j}|jdksJ dS )zcssutils.parseUrl()r   z	tv, printzfrom urlr   r   r   zbackground-imager   zimages/example.gifr   r   z../import3.csss?  /* import3 */
.import3 {
    /* from ./import/../import3.css */
    background: url(images/example3.gif);
    background: url(./images/example3.gif);
    background: url(import/images2/example2.gif);
    background: url(./import/images2/example2.gif);
    background: url(import/images2/../../images/example3.gif)
    }N)r   r#   r   r$   r%   parseUrlr   r   r   r   r   r   r   r   r   r    r   r!   stylegetPropertypropertyValuevaluer"   )	r'   r   r(   srimgr)   r*   ir2irs2r   r   r   test_parseUrl   s(   



zTestCSSutils.test_parseUrlc                 C   s   t d}d}d}| |jksJ t t jjdd}t | | |jks*J t t jjdd}|t _| |jks@J dS )z)cssutils.setSerializer() and cssutils.serza { left: 0 }za {
    left: 0
    }za {
 left: 0
 } )indentz    N)	r   r   r   r   r	   r   PreferencessetSerializerr   )r'   r(   exp4exp1newserr   r   r   test_setCSSSerializer   s   

z"TestCSSutils.test_setCSSSerializerc                 C   s   t d}t|t jjsJ |jdksJ t d}t|t jjs#J |jdks*J ddg}|D ]\}}t j|||d}|j|ksEJ q0tt	 t d d	 W d
   d
S 1 s_w   Y  d
S )zcssutils.parseStyle()z
x:0; y:redzx: 0;
y: redz@import "x"; )   content: "ä"r1   )u   content: "€"r   r2   rb   r0   N)
r   
parseStyler   r   CSSStyleDeclarationr   r   rC   rD   rE   )r'   r(   r+   ver   r   r   test_parseStyle  s    

"zTestCSSutils.test_parseStylec                 C   s@   dt jj_d}tt t |}|h dksJ dt jj_dS )zcssutils.getUrls()Ta  
        @import "im1";
        @import url(im2);
        @import url( im3 );
        @import url( "im4" );
        @import url( 'im5' );
        a {
            background-image: url(a) !important;
            background-\image: url(b);
            background: url(c) no-repeat !important;
            /* issue #46 */
            src: local("xx"),
                 url("f.woff") format("woff"),
                 url("f.otf") format("opentype"),
                 url("f.svg#f") format("svg");
            }>   f.otff.wofff.svg#fabcim1im2im3im4im5FN)r   r   prefskeepAllPropertiessetgetUrlsr   )r'   r   urlsr   r   r   test_getUrls  s
   
zTestCSSutils.test_getUrlsc                 C   s   dt jj_d}t |}t |dd  d|jd jksJ d|jd jks(J d	|jd
 j	jks3J dt jj_t 
d}t |dd  |jdksLJ dS )zcssutils.replaceUrls()Tz
        @import "im1";
        @import url(im2);
        a {
            background-image: url(c) !important;
            background-\image: url(b);
            background: url(a) no-repeat !important;
            }c                 S      d|  S )NNEWr   )oldr   r   r   <lambda>K      z/TestCSSutils.test_replaceUrls.<locals>.<lambda>z@import "NEWim1";r   NEWim2r   zpbackground-image: url(NEWc) !important;
background-\image: url(NEWb);
background: url(NEWa) no-repeat !important   Fzcolor: red;
                                        background-image:
                                            url(1.png),
                                            url('2.png')c                 S   ry   )Nzprefix/r   )urlr   r   r   r|   ^  r}   zBcolor: red;
background-image: url(prefix/1.png), url(prefix/2.png)N)r   r   rs   rt   r   replaceUrlsr!   r   r   rP   rc   )r'   r   r(   rP   r   r   r   test_replaceUrls>  s"   


zTestCSSutils.test_replaceUrlsr   c           	         sp  t jj  dd d}t }td|: d|f|_t 	 } |j
ks)J ||jd jj
ks4J t |}d|j
ks@J d|_d	|j
ksJJ W d   n1 sTw   Y  t }td|0 d
|_t 	 } |j
kssJ t|jd jt jjsJ t |}d|j
ksJ W d   n1 sw   Y  d d}t }td| d|f|_t 	 }t |}d|j
ksJ W d   n1 sw   Y  d d}t }td|  d|f|_t 	 }t |}  |j
ksJ W d   n	1 sw   Y  d dd }tjjt jd|d fdd}| \}}t jj  dt jj_d}||j
ks6J dS )zcssutils.resolveImports(sheet)u4   @charset "iso-8859-1";@import"b.css";ä{color:green}r1   s    @charset "ascii";\E4 {color:red}zcssutils.util._defaultFetcherNr   s   ä{color:red}ä{color:green}r0   s1   @charset "ascii";\E4 {color:red}\E4 {color:green})NNs   @import"b.css";ä{color:green}z<@import"b.css";@import"b.css" print, tv ;@import"b.css" all;r   s5   a{color:red}@media print,tv{a{color:red}}a{color:red}z@import"b.css"print;z @namespace "http://example.com";z
             @import"b/b.css";
             a {
                 x: url(/img/abs.gif);
                 y: url(img/img.gif);
                 z: url(b/subimg/subimg.gif);
                 }c                 S   s"   ddd}d|t j| d  fS )Nz
                     @import"../c.css";
                     b {
                         x: url(/img/abs.gif);
                         y: url(../img/img.gif);
                         z: url(subimg/subimg.gif);
                         }z
                     c {
                         x: url(/img/abs.gif);
                         y: url(./img/img.gif);
                         z: url(./b/subimg/subimg.gif);
                         })zb.csszc.cssr   r   )r:   r;   split)r   rm   r   r   r   fetcher  s   z1TestCSSutils.test_resolveImports.<locals>.fetcher_defaultFetcher)newc                     s   t  } t | }| |fS )N)r   r   resolveImports)r(   rrk   r   r   do  s   

z,TestCSSutils.test_resolveImports.<locals>.doFs  c {
    x: url(/img/abs.gif);
    y: url(img/img.gif);
    z: url(b/subimg/subimg.gif)
    }
b {
    x: url(/img/abs.gif);
    y: url(img/img.gif);
    z: url(b/subimg/subimg.gif)
    }
a {
    x: url(/img/abs.gif);
    y: url(img/img.gif);
    z: url(b/subimg/subimg.gif)
    })r   r   rs   useMinifiedr   r   Mockpatchreturn_valuer   r   r!   r"   r   r   r   r   r   objectutiluseDefaultskeepComments)	r'   rl   mr(   rm   r   r   r   expectedr   r   r   test_resolveImportse  sh   







	




z TestCSSutils.test_resolveImportsN)__name__
__module____qualname__r   r,   rN   rX   r`   rg   rx   r   rC   markusefixturesr   r   r   r   r   r      s    /v3$
'r   )__doc__rG   r:   r5   r>   unittestr   rC   r   ra   r   fixturer   BaseTestCaser   r   r   r   r   <module>   s    
