o
    lqitK                     @   sB   d Z ddlZddlZddlmZ ddlZddlZG dd dZ	dS )z:Tests for parsing which does not raise Exceptions normally    N)mockc                   @   s   e Zd Zdd Zdd Zdd Zdd Zejj	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 )"TestCSSParserc                    s    fdd}|S )z'make an URL fetcher with specified datac                    s    fS )N )urlcontentencodingr   `/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/cssutils/tests/test_parse.pyfetcher   s   z,TestCSSParser._make_fetcher.<locals>.fetcherr   )selfr   r   r
   r   r   r	   _make_fetcher   s   zTestCSSParser._make_fetcherc                 C   sJ  t jjsJ dt j_t  }|d}|jdksJ t jdd}|d}|jdks,J ttj	j
 |dd W d   n1 sDw   Y  t jdd}ttj	j |d W d   n1 sfw   Y  t j }ttj	j
 |dd W d   n1 sw   Y  dt j_t j }|dd |jdksJ dS )zCSSParser.__init__()T$    F)raiseExceptionscssTextN)cssutilslogr   	CSSParserparseStringr   pytestraisesxmldomZDOMException__setattr__Z	SyntaxErrcssZCSSStyleSheet)r   psr   r   r	   	test_init   s.   



zTestCSSParser.test_initc                 C   sH   d}t jdd}||jdksJ t jdd}||jdks"J dS )z'cssutils.CSSParser(parseComments=False)z/*1*/ a { color: /*2*/ red; }F)ZparseCommentss   a {
    color: red
    }Ts$   /*1*/
a {
    color: /*2*/ red
    }N)r   r   r   r   )r   r   r   r   r   r	   test_parseComments=   s
   z TestCSSParser.test_parseCommentsc              	   C   s  t  }t }td| d|_|jdddd}W d   n1 s$w   Y  |jdks0J |jdks7J |j	j
d	ks?J |jdksFJ d
d
d
d
ddddd}d}d}d}t| D ]v\\}}	\}
}}|| ||	 ||}|j||d}|
r|j|ksJ |j| ksJ |j|ksJ |jr|dr|j|d| ksJ q]|jr|j|d |  ksJ q]|j||  ksJ q]|du sJ |du sJ q]|d tt |d W d   dS 1 sw   Y  dS )zCSSParser.parseUrl()zcssutils.util._defaultFetcher)N zhttp://example.comztv,printtest)mediatitleNutf-8z	tv, print)FNN)Tr#   r   )Tr#   za {
    color: red
    })Tasciiz*@charset "ascii";
a {
    color: red
    }))r   N)1N)zmailto:a@bb.cdN)http://cthedot.de/test.cssN)r&   r   )r&   a)r&   za {color: red})r&   z@charset "ascii";a {color: red}
iso-8859-1z@charset "iso-8859-1";r   z@charsetr$   
z../not-valid-in-urllib)r   r   r   ZMockpatchreturn_valueparseUrlhrefr   r!   	mediaTextr"   listitems
setFetcherr   r   encode
startswithreplacer   r   
ValueError)r   parsermsheettestsoverrideZoverrideprefixZhttpencodingr   r   ZisSheetZexpencodingr   Zsheet1sheet2r   r   r	   test_parseUrlF   sZ   


"zTestCSSParser.test_parseUrlc                 C   sF   t  }ttjj |d W d    d S 1 sw   Y  d S )Nz!http://cthedot.de/not-present.css)r   r   r   r   urlliberror	HTTPErrorr-   )r   r7   r   r   r	   test_parseUrl_404   s   "zTestCSSParser.test_parseUrl_404c              	   C   s  i ddddd  dfdd  fd  dfdd  fd	dd
dddddd  fddd dfddd  fddd dfddd  fddd  fddd  fdddddd }|D ]!}|\}}tj||d!}|| \}}||jksJ ||jksJ qed ddfd dd"fd  d"fd#g}|D ]!}tt t|d$ |d%  W d   n1 sw   Y  qdS )&zCSSParser.parseString())/*a*/N)r#   s   /*a*/)rB   r$   )r$   s   @charset "ascii";
/*a*/u   /*ä*/Nr#   u   @charset "utf-8";
/*ä*/)z@charset "ascii";/*a*/N)z@charset "utf-8";/*a*/N)r#   s   @charset "utf-8";
/*a*/)z@charset "iso-8859-1";/*a*/N)r(   s   @charset "iso-8859-1";
/*a*/)   /*€*/NrC   )   @charset "iso-8859-1";/*ä*/Nr(   u   @charset "iso-8859-1";
/*ä*/)   @charset "utf-8";/*€*/Nu   @charset "utf-8";
/*€*/)@charset "utf-16";/**/Nutf-16z@charset "utf-16";
/**/)rC   r#   )rD   r#   )rE   r#   )rF   r#   )r#   s   @charset "utf-8";
/**/)rC   r$   )r$   s   @charset "ascii";
/*\20AC */)rC   r(   )r(   s!   @charset "iso-8859-1";
/*\20AC */r)   r$   )   arG   r      )r3   r   r   r   r   r   r   UnicodeDecodeError)r   r:   r    r   r   r9   r   r   r   r	   test_parseString   s   	

 $)*.27;@
zTestCSSParser.test_parseStringc                 C   sP  d}d| }t |}|jsJ t j|dd}|jdu sJ t j|dd}|js*J t |}|js4J t j|dd}|js@J t j|dd}|jdu sNJ t  }||}|js\J |j|dd}|jdu sjJ |j|dd}|jsvJ ||}|jsJ t jdd}||}|jsJ |j|dd}|jdu sJ |j|dd}|jsJ ||}|jsJ t jdd}||}|jdu sJ |j|dd}|jdu sJ |j|dd}|jsJ ||}|jdu sJ t jdd}|| d| d}||}|jdu s
J |j|dd}|jdu sJ |j|dd}|js&J dS )	zCSSParser(validate)z
color: redza { %s }F)validateTr#   r   N)r   r   Z
validatingZ
parseStyler   r2   r   r-   )r   styletr   dr   ur   r   r	   test_validate   sd   



















zTestCSSParser.test_validatec                 C   s  ddddddddddddd	  fd

}t }|D ]h}|\}}}|| \}}}	}
|| j|  tj| j| d}|j||d}|j||d}|j|ksNJ |j|ksUJ |j| jj|	ks`J |j| jj|	kskJ |j| jj	|
ksvJ |j| jj	|
ksJ qdS )a  CSSParser.fetcher

        order:
           0. explicity given encoding OVERRIDE (cssutils only)

           1. An HTTP "charset" parameter in a "Content-Type" field
              (or similar parameters in other protocols)
           2. BOM and/or @charset (see below)
           3. <link charset=""> or other metadata from the linking mechanism (if any)
           4. charset of referring style sheet or document (if any)
           5. Assume UTF-8
        )r$   rI   r$   s   @charset "ascii";
/*t*/)rG   rI   r(   s   @charset "iso-8859-1";
/*t*/)r#   r   r#   s   /*t*/)r$   rI   r$      @charset "ascii";
/*\287 */)r$   rI   r(   s    @charset "iso-8859-1";
/*\287 */)r#   r   r$   rR   r#   r      /*ʇ*/)
)@charset "utf-16"; @import "x";ASCII)r(   @charset "latin1";/*t*/)@charset "UTF-16"; @import "x";N)z
ISO-8859-1rV   )rW   N)Nz@charset "ISO-8859-1";/*t*/)z@charset "ASCII"; @import "x";NNz/*t*/)@import "x";NrX   )rT   rU   )Nu   @charset "latin1";/*ʇ*/)@charset "ascii"; @import "x";N)r(   rS   )rZ   NNrS   )rY   N)r$   rS   )rY   Nr[   )r
   r)   N)
r3   r   r   r2   r   r   r   cssRulesZ
styleSheetr   )r   r:   r7   r    r   r   Z	fetchdataZsheetencodingZimportIndexZimportEncodingZ
importTextZparser2r9   r<   r   r   r	   test_fetcher$  s<   Q
zTestCSSParser.test_fetcherc                 C   sX   d}t |}t|jd}||ksJ t |}d|jd _d}|t|jdks*J dS )zcssutils encodingsu   @charset "utf-8";
/* ä */r#   r$   r   z@charset "ascii";
/* \E4  */N)r   r   strr   r\   r   )r   Zcss1r   Zcss2Zcss3r   r   r	   test_roundtrip  s   

zTestCSSParser.test_roundtripc                 C   s<   d}t |}|jdksJ d}t |}|jdksJ dS )zcssutils escapesz#\43\x { \43\x: \43\x !import\41nt }s#   C\x {
    c\x: C\x !important
    }z\ x{\ x :\ x ;y:1} s"   \ x {
    \ x: \ x;
    y: 1
    }N)r   r   r   )r   r   r9   r   r   r	   test_escapes  s   

zTestCSSParser.test_escapesc                 C   sx   d}d| d| d| d| d| d| f}|D ]}t |}| |jks(J qd}|D ]}d	t |jks9J q-d
S )z$cssutils.parseString(INVALID_STRING)z@namespace "x";z!@charset "ascii
                ;z!@charset 'ascii
                ;z@namespace "y
                ;z@import "y
                ;z!@import url('a
                );z@unknown "y
                ;)z-a { font-family: "Courier
                ; }z$a { content: "\"; }
                z&a { content: "\\\"; }
                r   Nr   r   r3   r   )r   ZvalidfromhereZcsssr   r   r   r   r	   test_invalidstring  s6   
z TestCSSParser.test_invalidstringc                 C   sH   ddd}|D ]}|| }|du r|}t |}| |jks!J qdS )z!cssutils.parseString(INVALID_CSS)z4a {
    color: blue
    }
a {
    color: green
    }zp {
    color: green
    })z.a {color: blue}} a{color: red} a{color: green}z%p @here {color: red} p {color: green}Nra   r   r:   r   expr   r   r   r	   test_invalid  s   

zTestCSSParser.test_invalidc                 C   sD   ddddddd}t | D ]\}}| t|jksJ qdS )zcssutils.parseString nestingzdiv {
    color: green
    }r   )z@1; div{color:green}z@1 []; div{color:green}z@1 [{}]; div { color:green; }z!@media all { @ } div{color:green}z@1 { [ } div{color:green}z)@1 { [ } ] div{color:red}div{color:green}N)r0   r1   r3   r   r   r   )r   r:   r   rd   r   r   r	   test_nesting  s   
zTestCSSParser.test_nestingc                 C   sF   ddi}|D ]}|| }|du r|}t |}| |jks J qdS )z"cssutils.parseString(special_case)z2
    a[title="a not so very long title"] {/*...*/}z7a[title="a not so very long title"] {
    /*...*/
    }Nra   rc   r   r   r	   test_specialcases  s   
zTestCSSParser.test_specialcasesc                 C   s   d}t |}|jd jd}d|jksJ d|jksJ d|jd jdks+J |jd jd}|du s:J d|jd jdksGJ d|jd jjksRJ dS )z%IEhack: $property (not since 0.9.5b3)z a { color: green; $color: red; }r   colorr   z$colorNgreen)	r   r   r\   rM   getPropertynameZliteralnameZgetPropertyValuerh   )r   r   r   p1p2r   r   r	   test_iehack  s   
zTestCSSParser.test_iehackc                 C   sV   t jdddd}|jdksJ |jjdksJ t jddg dd}|jjdks)J dS )z!cssutils.parseString(href, media)za{}zfile:foo.csszscreen, projection, tv)r.   r!   )screenZ
projectiontvN)r   r   r.   r!   r/   )r   r   r   r   r	   test_attributes%  s   
zTestCSSParser.test_attributesN)__name__
__module____qualname__r   r   r   r=   r   marknetworkrA   rK   rQ   r]   r_   r`   rb   re   rf   rg   rn   rq   r   r   r   r	   r      s$    (	A
U@t&r   )
__doc__urllib.errorr>   Zxml.domr   Zunittestr   r   r   r   r   r   r   r	   <module>   s    