
     htK                     H    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      Z	y)z:Tests for parsing which does not raise Exceptions normally    N)mockc                       e Zd Zd Zd Zd Zd Zej                  j                  d        Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)TestCSSParserc                     fd}|S )z'make an URL fetcher with specified datac                     fS )N )urlcontentencodings    Y/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/cssutils/tests/test_parse.pyfetcherz,TestCSSParser._make_fetcher.<locals>.fetcher   s    W$$    r   )selfr   r
   r   s    `` r   _make_fetcherzTestCSSParser._make_fetcher   s    	% r   c                 N   t         j                  j                  sJ dt         j                  _        t        j                         }|j	                  d      }|j
                  dk(  sJ t        j                  d      }|j	                  d      }|j
                  dk(  sJ t        j                  t        j                  j                        5  |j                  dd       ddd       t        j                  d      }t        j                  t        j                  j                        5  |j	                  d       ddd       t         j                  j                         }t        j                  t        j                  j                        5  |j                  dd       ddd       dt         j                  _        t         j                  j                         }|j                  dd       |j
                  dk(  sJ y# 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zCSSParser.__init__()T$r   F)raiseExceptionscssTextN)cssutilslogr   	CSSParserparseStringr   pytestraisesxmldomDOMException__setattr__	SyntaxErrcssCSSStyleSheet)r   pss      r   	test_initzTestCSSParser.test_init   s   ||++++ (,$  MM#yyC u5MM#yyC ]]377//0MM)S) 1 t4]]377,,-MM# . LL&&(]]377//0MM)S) 1 (-$LL&&(	i%yyC) 10 .-
 10s$   H+HHHHH$c                     d}t        j                  d      }|j                  |      j                  dk(  sJ t        j                  d      }|j                  |      j                  dk(  sJ y)z'cssutils.CSSParser(parseComments=False)z/*1*/ a { color: /*2*/ red; }F)parseCommentss   a {
    color: red
    }Ts$   /*1*/
a {
    color: /*2*/ red
    }N)r   r   r   r   )r   r    r"   s      r   test_parseCommentsz TestCSSParser.test_parseComments=   sc    -U3}}S!))-JJJJT2}}S!))-WWWWr   c           	         t        j                         }t        j                         }t        j                  d|      5  d|_        |j                  ddd      }ddd       j                  dk(  sJ |j                  dk(  sJ |j                  j                  d	k(  sJ |j                  dk(  sJ d
d
d
d
ddddd}d}d}d}t        |j                               D ]A  \  \  }}	\  }
}}|j                  | j                  ||	             |j                  |      }|j                  ||      }|
r|j                  |k(  sJ |j                   |j#                         k(  sJ |j                  |k(  sJ |j                   rA|j%                  d      r0|j                   |j'                  d|      j#                         k(  rJ |j                   r'|j                   |dz   |z   j#                         k(  rJ |j                   ||z   j#                         k(  r8J |J |BJ  |j                  d       t)        j*                  t,              5  |j                  d       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)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)r0   r)   )r0   a)r0   za {color: red})r0   z@charset "ascii";a {color: red}
iso-8859-1z@charset "iso-8859-1";r   z@charsetr.   
z../not-valid-in-urllib)r   r   r   Mockpatchreturn_valueparseUrlhrefr   r+   	mediaTextr,   listitems
setFetcherr   r   encode
startswithreplacer   r   
ValueError)r   parsermsheettestsoverrideoverrideprefixhttpencodingr	   r
   isSheetexpencodingr   sheet1sheet2s                  r   test_parseUrlzTestCSSParser.test_parseUrlF   sd    ##%IIKZZ7;'ANOO$Jf $ E < zz1111~~((({{$$333{{f$$$
 ,,&92E0C1D?
P
&  1?CEKKM?R;NS';Wk7d00wGH__S)F__S8_<F+555~~)9999(222>>g&8&8&D!>>:AAC   ^^!>>nt.Cg.M-U-U-WWWW!>>nw.F-N-N-PPPP~%~~%~% @S( 	$]]:&OO45 '&s <;r '&s   I%
I2%I/2I;c                     t        j                         }t        j                  t        j
                  j                        5  |j                  d       d d d        y # 1 sw Y   y xY w)Nz!http://cthedot.de/not-present.css)r   r   r   r   urlliberror	HTTPErrorr8   )r   rB   s     r   test_parseUrl_404zTestCSSParser.test_parseUrl_404   sA    ##%]]6<<112OO3 322s   AA&c                 ~   i dddddj                         dfddj                         fdj                         dfddj                         fd	dd
ddddddj                         fdddj                  d      fdddj                         fdddj                  d      fdddj                         fdddj                         fdddj                         fdddddd }|D ]H  }|\  }}t        j                  ||!      }||   \  }}||j                  k(  sJ ||j                  k(  rHJ  dj                  d      dfdj                  d      d"fdj                         d"fd#g}|D ]@  }t        j                  t              5  t        j                  |d$   |d%          ddd       B y# 1 sw Y   MxY w)&zCSSParser.parseString())/*a*/N)r-   s   /*a*/)rT   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)r2   s   @charset "iso-8859-1";
/*a*/)   /*€*/NrU   )   @charset "iso-8859-1";/*ä*/Nr2   u   @charset "iso-8859-1";
/*ä*/)   @charset "utf-8";/*€*/Nu   @charset "utf-8";
/*€*/)@charset "utf-16";/**/Nutf-16z@charset "utf-16";
/**/)rU   r-   )rV   r-   )rW   r-   )rX   r-   )r-   s   @charset "utf-8";
/**/)rU   r.   )r.   s   @charset "ascii";
/*\20AC */)rU   r2   )r2   s!   @charset "iso-8859-1";
/*\20AC */r3   r.   )   arY   r      )r>   r   r   r   r   r   r   UnicodeDecodeError)r   rE   r*   r    r   rD   r   s          r   test_parseStringzTestCSSParser.test_parseString   s   ?
0?
  F?
  $'':3D3D3F)G?
  '*-446-?
 - /?
$ - /%?
, 2 4-?
6 )9)9);<7?
8 3077E59?
@ /,3351A?
H -*11(;/I?
R !7,H,O,O,Q"RS?
T 6+2248U?
\ 2,3354]?
d 0 2e?
n ! #o?
v & (w?
@ D MC((x@E %dHgu~~---emm+++  h'1__\*G4)
 D12$$T!Wd1g6 32 22s   F33F<	c                    d}d|z  }t        j                  |      }|j                  sJ t        j                  |d      }|j                  du sJ t        j                  |d      }|j                  sJ t        j                  |      }|j                  sJ t        j                  |d      }|j                  sJ t        j                  |d      }|j                  du sJ t        j                         }|j                  |      }|j                  sJ |j                  |d      }|j                  du sJ |j                  |d      }|j                  sJ |j                  |      }|j                  sJ t        j                  d      }|j                  |      }|j                  sJ |j                  |d      }|j                  du sJ |j                  |d      }|j                  sJ |j                  |      }|j                  sJ t        j                  d      }|j                  |      }|j                  du sJ |j                  |d      }|j                  du sJ |j                  |d      }|j                  sJ |j                  |      }|j                  du sJ t        j                  d      }|j                  | j                  d|             d}|j                  |      }|j                  du sJ |j                  |d      }|j                  du sJ |j                  |d      }|j                  sJ y)	zCSSParser(validate)z
color: redza { %s }F)validateTr-   r	   N)r   r   
validating
parseStyler   r=   r   r8   )r   styletr#   dr"   us          r   test_validatezTestCSSParser.test_validate   s      #|||  U3||u$$$  T2|||&|||5|||6||u$$$  MM!|||MM!eM,||u$$$MM!dM+|||LL|||-MM!|||MM!eM,||u$$$MM!dM+|||LL|||.MM!||u$$$MM!eM,||u$$$MM!dM+|||LL||u$$$ .	T''34JJqM||u$$$JJq5J)||u$$$JJq4J(|||r   c                    ddddddddddddd	j                         fd

}t        j                         }|D ]<  }|\  }}}||   \  }}}	}
|j                   | j                  |        t        j                   | j                  |       }|j                  ||      }|j                  ||      }|j                  |k(  sJ |j                  |k(  sJ |j                  |   j                  j                  |	k(  sJ |j                  |   j                  j                  |	k(  sJ |j                  |   j                  j                  |
k(  sJ |j                  |   j                  j                  |
k(  r=J  y)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.   r[   r.   s   @charset "ascii";
/*t*/)rY   r[   r2   s   @charset "iso-8859-1";
/*t*/)r-   r   r-   s   /*t*/)r.   r[   r.      @charset "ascii";
/*\287 */)r.   r[   r2   s    @charset "iso-8859-1";
/*\287 */)r-   r   r.   rh   r-   r      /*ʇ*/)
)@charset "utf-16"; @import "x";ASCII)r2   @charset "latin1";/*t*/)@charset "UTF-16"; @import "x";N)z
ISO-8859-1rl   )rm   N)Nz@charset "ISO-8859-1";/*t*/)z@charset "ASCII"; @import "x";NNz/*t*/)@import "x";Nrn   )rj   rk   )Nu   @charset "latin1";/*ʇ*/)@charset "ascii"; @import "x";N)r2   ri   )rp   NNri   )ro   N)r.   ri   )ro   Nrq   )r   r3   N)
r>   r   r   r=   r   r   r   cssRules
styleSheetr   )r   rE   rB   r*   r    r   	fetchdatasheetencodingimportIndeximportEncoding
importTextparser2rD   rL   s                 r   test_fetcherzTestCSSParser.test_fetcher$  s   * BH6 GUM> ##%	;UP
b ##%D'+$C9EJ4[BM;
 0d00)<=((1C1C1CY1OPG&&sX&>E((x(@F >>]222??m333>>+.99BBnTTT??;/::CC~UUU>>+.99AAZOOO??;/::BBjPPP' r   c                     d}t        j                  |      }t        |j                  d      }||k(  sJ t        j                  |      }d|j                  d   _        d}|t        |j                  d      k(  sJ y)zcssutils encodingsu   @charset "utf-8";
/* ä */r-   r.   r   z@charset "ascii";
/* \E4  */N)r   r   strr   rr   r   )r   css1r#   css2css3s        r   test_roundtripzTestCSSParser.test_roundtrip  su      &199g&t||  &!(

1s199g....r   c                     d}t        j                  |      }|j                  dk(  sJ d}t        j                  |      }|j                  dk(  sJ y)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    rD   s      r   test_escapeszTestCSSParser.test_escapes  sd    4$$S)MM			
	 %$$S)MM			
	r   c                    d}d|z   d|z   d|z   d|z   d|z   d|z   f}|D ]6  }t        j                  |      }|j                         |j                  k(  r6J  d}|D ]&  }d	t        j                  |      j                  k(  r&J  y
)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   r>   r   )r   validfromherecsssr    r#   s        r   test_invalidstringz TestCSSParser.test_invalidstring  s    )!
( C$$S)A '')QYY666 
 C(..s3;;;;; r   c                     ddd}|D ]?  }||   }||}t        j                  |      }|j                         |j                  k(  r?J  y)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}Nr   r   rE   r    expr#   s        r   test_invalidzTestCSSParser.test_invalid  s[    ?	 6T
 C*C{$$S)A::<199,,, r   c                     ddddddd}t        |j                               D ]7  \  }}|j                         t        j                  |      j
                  k(  r7J  y)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)r;   r<   r>   r   r   r   )r   rE   r    r   s       r   test_nestingzTestCSSParser.test_nesting  s^     %E'G-M1Q)+9Y	
 U[[]+HC::<8#7#7#<#D#DDDD ,r   c                     ddi}|D ]?  }||   }||}t        j                  |      }|j                         |j                  k(  r?J  y)z"cssutils.parseString(special_case)z2
    a[title="a not so very long title"] {/*...*/}z7a[title="a not so very long title"] {
    /*...*/
    }Nr   r   s        r   test_specialcaseszTestCSSParser.test_specialcases  sZ    !#	
 C*C{$$S)A::<199,,, r   c                 "   d}t        j                  |      }|j                  d   j                  j	                  d      }d|j
                  k(  sJ d|j                  k(  sJ d|j                  d   j                  j                  d      k(  sJ |j                  d   j                  j	                  d      }|J d|j                  d   j                  j                  d      k(  sJ d|j                  d   j                  j                  k(  sJ y)z%IEhack: $property (not since 0.9.5b3)z a { color: green; $color: red; }r   colorr)   z$colorNgreen)	r   r   rr   rb   getPropertynameliteralnamegetPropertyValuer   )r   r    r#   p1p2s        r   test_iehackzTestCSSParser.test_iehack  s     1  %ZZ]  ,,W5"''!!!"..(((QZZ]((99(CCCCZZ]  ,,X6zz!**Q--->>wGGGG!**Q---33333r   c                     t        j                  ddd      }|j                  dk(  sJ |j                  j                  dk(  sJ t        j                  ddg d      }|j                  j                  dk(  sJ y)z!cssutils.parseString(href, media)za{}zfile:foo.csszscreen, projection, tv)r9   r+   )screen
projectiontvN)r   r   r9   r+   r:   )r   r#   s     r   test_attributeszTestCSSParser.test_attributes%  sz      .F
 vv'''ww  $<<<<  .L
 ww  $<<<<r   N)__name__
__module____qualname__r   r$   r'   rM   r   marknetworkrR   r]   rf   rz   r   r   r   r   r   r   r   r   r   r   r   r   r      sv    & PX?6B [[ S7j<@rQh/
*$<L-&E - 4"=r   r   )
__doc__urllib.errorrO   xml.domr   unittestr   r   r   r   r   r   r   <module>r      s#    @     d= d=r   