
    w:i%V                     .   d dl Z d dlmZmZmZmZ d dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZ  G d de j                  Z G d d	e j                  Z G d
 de j                  Z G d de j                  Zd Zedk    r e j        d           dS dS )    N)AttrsMarkupQNameStream)HTMLXML)DocTypeXMLSerializerXHTMLSerializerHTMLSerializerEmptyTagFilter)doctest_suitec                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )XMLSerializerTestCasec                     t          t           j        ddfg          }|                    t          dd           }|                     d|           d S )Nz1.0NNr   r   xhtmldoctypeencoding<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
)r   XML_DECLrenderr
   assertEqualselfstreamoutputs      P/var/www/html/trac/venv/lib/python3.11/site-packages/genshi/tests/test_output.pytest_with_xml_declz(XMLSerializerTestCase.test_with_xml_decl   s`    &/+<nMNOO}gMM R  		! 	! 	! 	! 	!    c                     t          t           j        t          j        dfg          }|                    t
          d           }|                     d|           d S )Nr   r   [<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
)r   DOCTYPEr	   HTML_STRICTr   r
   r   r   s      r!   test_doctype_in_streamz,XMLSerializerTestCase.test_doctype_in_stream"   s`    &.'*=~NOPP}t<< F  	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          d           }|                     d|           d S )N)htmlz-//W3C//DTD HTML 4.01//ENNr   r%   z3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
r   r'   r   r
   r   r   s      r!   test_doctype_in_stream_no_sysidz5XMLSerializerTestCase.test_doctype_in_stream_no_sysid*   sd    &.D') * + + }t<<O	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          d           }|                     d|           d S )N)r+   Nz%http://www.w3.org/TR/html4/strict.dtdr   r%   z?<!DOCTYPE html SYSTEM "http://www.w3.org/TR/html4/strict.dtd">
r,   r   s      r!   test_doctype_in_stream_no_pubidz5XMLSerializerTestCase.test_doctype_in_stream_no_pubid2   sh    ^D
  
 }t<< F	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          d           }|                     d|           d S )Nr+   NNr   r%   z<!DOCTYPE html>
r,   r   s      r!   (test_doctype_in_stream_no_pubid_or_sysidz>XMLSerializerTestCase.test_doctype_in_stream_no_pubid_or_sysid=   sW    &.*>') * + +}t<<,f55555r#   c                     t          g           }|                    t          t          j        d           }|                     d|           d S )Nr   r&   )r   r   r
   r	   r(   r   r   s      r!   test_serializer_doctypez-XMLSerializerTestCase.test_serializer_doctypeC   s\    }g6I(,  . . F  	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          t          j        d           }|                     d|           d S )Nr1   r   r   r&   )r   r'   r   r
   r	   r(   r   r   s      r!   test_doctype_one_and_onlyz/XMLSerializerTestCase.test_doctype_one_and_onlyL   st    ^1>B
   }g6I(,  . . F  	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          d           }|                     d|           d S )Nzfoo barr   r%   z<!--foo bar-->)r   COMMENTr   r
   r   r   s      r!   test_commentz"XMLSerializerTestCase.test_commentW   sM    &.)^DEFF}t<<)622222r#   c                     t          t           j        ddfg          }|                    t          d           }|                     d|           d S )N)pythonzx = 2r   r%   z<?python x = 2?>)r   PIr   r
   r   r   s      r!   test_processing_instructionz1XMLSerializerTestCase.test_processing_instruction\   sN    &)%8.IJKK}t<<+V44444r#   c                    t          t           j        ddft           j        t          d          t	                      fdft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dft           j        ddfg          }|                    t          d           }| 
                    d	|           d S )
N http://example.org/r   http://example.org/}div
          http://example.org/}pr@   	
        r%   zN<div xmlns="http://example.org/">
          <p/>
          <p/>
        </div>r   START_NSSTARTr   r   TEXTENDEND_NSr   r
   r   r   s      r!   test_nested_default_namespacesz4XMLSerializerTestCase.test_nested_default_namespacesa   sa   _9>J\E";<<eggFW[..9_9>J\E"9::EGGDnUZ677H]B/[..9_9>J\E"9::EGGDnUZ677H]B/[,7Z899>J]B/
  " }t<<  	 	 	 	 	r#   c                    t          t           j        ddft           j        t          d          t	                      fdft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dft           j        ddfg          }|                    t          d           }| 
                    d	|           d S )
NxrA   r   rB   rC   rD   rO   rE   r%   zX<x:div xmlns:x="http://example.org/">
          <x:p/>
          <x:p/>
        </x:div>rF   r   s      r!   test_nested_bound_namespacesz2XMLSerializerTestCase.test_nested_bound_namespacesy   sa   _:NK\E";<<eggFW[..9_:NK\E"9::EGGDnUZ677H]C0[..9_:NK\E"9::EGGDnUZ677H]C0[,7Z899>J]C0
  " }t<<  	 	 	 	 	r#   c                    t          t           j        t          d          t                      fdft           j        ddft           j        ddft           j        t          d          t                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dfg          }|                    t          d           }| 
                    d	|           d S )
Ndivr   rC   r?   rD   r@   rE   r%   zj<div>
          <p xmlns="http://example.org/"/>
          <p xmlns="http://example.org/"/>
        </div>r   rH   r   r   rI   rG   rJ   rK   r   r
   r   r   s      r!    test_multiple_default_namespacesz6XMLSerializerTestCase.test_multiple_default_namespaces   sB   \E%LL%''2NC[..9_9>J\E"9::EGGDnUZ677H]B/[..9_9>J\E"9::EGGDnUZ677H]B/[,7Zu~6
   }t<<  	 	 	 	 	r#   c                    t          t           j        t          d          t                      fdft           j        ddft           j        ddft           j        t          d          t                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dfg          }|                    t          d           }| 
                    d	|           d S )
NrR   r   rC   rN   rD   rO   rE   r%   zr<div>
          <x:p xmlns:x="http://example.org/"/>
          <x:p xmlns:x="http://example.org/"/>
        </div>rS   r   s      r!   test_multiple_bound_namespacesz4XMLSerializerTestCase.test_multiple_bound_namespaces   sB   \E%LL%''2NC[..9_:NK\E"9::EGGDnUZ677H]C0[..9_:NK\E"9::EGGDnUZ677H]C0[,7Zu~6
   }t<<  	 	 	 	 	r#   c                     d}t          |                              t          d           }|                     ||           d S )Na  <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
            <id>urn:uuid:c60843aa-0da8-4fa6-bbe5-98007bc6774e</id>
            <updated>2007-01-28T11:36:02.807108-06:00</updated>
            <title type="xhtml">
                <div xmlns="http://www.w3.org/1999/xhtml">Example</div>
            </title>
            <subtitle type="xhtml">
                <div xmlns="http://www.w3.org/1999/xhtml">Bla bla bla</div>
            </subtitle>
            <icon/>
        </feed>r%   r   r   r
   r   r   textr    s      r!   test_atom_with_xhtmlz*XMLSerializerTestCase.test_atom_with_xhtml   sE    
 T!!-$!??v&&&&&r#   N)__name__
__module____qualname__r"   r)   r-   r/   r2   r4   r6   r9   r=   rL   rP   rT   rV   r[    r#   r!   r   r      s        ! ! !! ! !! ! !	! 	! 	!6 6 6! ! !	! 	! 	!3 3 3
5 5 5
  0  0  ,  ,' ' ' ' 'r#   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )XHTMLSerializerTestCasec                     t          t           j        ddfg          }|                    t          dd           }|                     d|           d S )Nr   r   r   r   zn<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
r   r   r   r   r   r   s      r!   test_xml_decl_droppedz-XHTMLSerializerTestCase.test_xml_decl_dropped   s`    &/+<nMNOO$OO R  	! 	! 	! 	! 	!r#   c                     t          t           j        ddfg          }|                    t          ddd           }|                     d|           d S )Nr   r   r   F)r   drop_xml_declr   r   rc   r   s      r!   test_xml_decl_includedz.XHTMLSerializerTestCase.test_xml_decl_included   sl    &/+<nMNOO-2T  C C R  		! 	! 	! 	! 	!r#   c                     d}t          |                              t          d           }|                     d|           d S )N!<p xml:lang="en">English text</p>r%   +<p lang="en" xml:lang="en">English text</p>r   r   r   r   rY   s      r!   test_xml_langz%XHTMLSerializerTestCase.test_xml_lang   sB    2T!!/D!AAFOOOOOr#   c                     d}t          |                              t          d           }|                     d|           d S )Nz+<p xml:lang="en" lang="en">English text</p>r%   rk   rY   s      r!   test_xml_lang_nodupz+XHTMLSerializerTestCase.test_xml_lang_nodup   sB    <T!!/D!AAFOOOOOr#   c                     d}t          d|z            }|                    t          d           }|                     d|z  |           d S Nz"
Hey there.  

    I am indented.
z"<textarea name="foo">%s</textarea>r%   rk   r   contentr   r    s       r!   test_textarea_whitespacez0XHTMLSerializerTestCase.test_textarea_whitespace   sQ    :9GCDD>>=GPPPPPr#   c                     d}t          d|z            }|                    t          d           }|                     d|z  |           d S Nz+
Hey <em>there</em>.  

    I am indented.
z<pre>%s</pre>r%   rk   rq   s       r!   test_pre_whitespacez+XHTMLSerializerTestCase.test_pre_whitespace   sO    C_w.//>>72F;;;;;r#   c                     d}t          |                              t          d           }|                     d|           d S Nz9<foo xml:space="preserve"> Do not mess  

 with me </foo>r%   z$<foo> Do not mess  

 with me </foo>rk   rY   s      r!   test_xml_spacez&XHTMLSerializerTestCase.test_xml_space   sB    LT!!/D!AAA6JJJJJr#   c                     d}t          |                              t          d           }|                     d|           d S )Nz_<html xmlns="http://www.w3.org/1999/xhtml">
            <script src="foo.js" />
        </html>r%   zf<html xmlns="http://www.w3.org/1999/xhtml">
            <script src="foo.js"></script>
        </html>rk   rY   s      r!   test_empty_scriptz)XHTMLSerializerTestCase.test_empty_script   sS     T!!/D!AA 	 	 	 	 	r#   c                     d}t          |                              t          d           }|                     ||           d S )NzW<script>/*<![CDATA[*/
            if (1 < 2) { alert("Doh"); }
        /*]]>*/</script>r%   rk   rY   s      r!   test_script_escapingz,XHTMLSerializerTestCase.test_script_escaping  E     T!!/D!AAv&&&&&r#   c                     d}t          |                              t          d           }|                     ||           d S )Nz|<script xmlns="http://www.w3.org/1999/xhtml">/*<![CDATA[*/
            if (1 < 2) { alert("Doh"); }
        /*]]>*/</script>r%   rk   rY   s      r!   #test_script_escaping_with_namespacez;XHTMLSerializerTestCase.test_script_escaping_with_namespace  r~   r#   c                     d}t          |                              t          d           }|                     ||           d S )NzW<style>/*<![CDATA[*/
            html > body { display: none; }
        /*]]>*/</style>r%   rk   rY   s      r!   test_style_escapingz+XHTMLSerializerTestCase.test_style_escaping  E     T!!/D!AAv&&&&&r#   c                     d}t          |                              t          d           }|                     ||           d S )Nz|<style xmlns="http://www.w3.org/1999/xhtml">/*<![CDATA[*/
            html > body { display: none; }
        /*]]>*/</style>r%   rk   rY   s      r!   "test_style_escaping_with_namespacez:XHTMLSerializerTestCase.test_style_escaping_with_namespace  r   r#   c                     d}t          |                              t          d           }|                     ||           d S )NaV  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
          <body>
            <button>
              <svg:svg width="600px" height="400px">
                <svg:polygon id="triangle" points="50,50 50,300 300,300"></svg:polygon>
              </svg:svg>
            </button>
          </body>
        </html>r%   rk   rY   s      r!   test_embedded_svgz)XHTMLSerializerTestCase.test_embedded_svg!  sE     T!!/D!AAv&&&&&r#   c                     d}t          |                              t          d           }|                     ||           d S )Nz\<div xmlns="http://www.w3.org/1999/xhtml">
            <strong>Hello</strong>
        </div>r%   rk   rY   s      r!   test_xhtml_namespace_prefixz3XHTMLSerializerTestCase.test_xhtml_namespace_prefix.  sE     T!!/D!AAv&&&&&r#   c                    t          t           j        ddft           j        t          d          t	                      fdft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dft           j        ddfg          }|                    t          d           }| 
                    d	|           d S )
Nr?   r   rR   rC   pr@   rE   r%   zT<div xmlns="http://example.org/">
          <p></p>
          <p></p>
        </div>r   rG   rH   r   r   rI   rJ   rK   r   r   r   r   s      r!   rL   z6XHTMLSerializerTestCase.test_nested_default_namespaces5  sO   _9>J\E%LL%''2NC[..9_9>J\E#JJ0.AZs^4]B/[..9_9>J\E#JJ0.AZs^4]B/[,7Zu~6]B/
  " >>  	 	 	 	 	r#   c                    t          t           j        ddft           j        t          d          t	                      fdft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        ddft           j        t          d          t	                      fdft           j        t          d          dft           j        ddft           j        ddft           j        t          d          dft           j        ddfg          }|                    t          d           }| 
                    d	|           d S )
NrN   r   rR   rC   r   rO   rE   r%   zV<div xmlns:x="http://example.org/">
          <p></p>
          <p></p>
        </div>r   r   s      r!   rP   z4XHTMLSerializerTestCase.test_nested_bound_namespacesM  sO   _:NK\E%LL%''2NC[..9_:NK\E#JJ0.AZs^4]C0[..9_:NK\E#JJ0.AZs^4]C0[,7Zu~6]C0
  " >>  	 	 	 	 	r#   c                     t          d          }|                    t          t          j        d           }|                     d|           d S Nz<html></html>r   z<!DOCTYPE html>
<html></html>)r   r   r   r	   HTML5r   r   s      r!   test_html5_doctypez*XHTMLSerializerTestCase.test_html5_doctypee  sN    &''(,  . .96BBBBBr#   c                     d}t          |                              t          d           }|                     d|           d S )Nz <foo> Mess  


 with me!  </foo>r%   z<foo> Mess
 with me!  </foo>rX   rY   s      r!   test_ignorable_spacez,XHTMLSerializerTestCase.test_ignorable_spacek  sB    4T!!-$!??8&AAAAAr#   c                    d}t          t           j        t          d          t                      f|ft           j        d|ft           j        t          d          |ft           j        t          d          t                      f|ft           j        t          d          |ft           j        t          d          |fg          }|                    t          d d          }| 	                    d|           d S )Nr   fooz&hellip;barF)r   strip_whitespacez*<foo>&amp;hellip;</foo><bar>&hellip;</bar>)
r   rH   r   r   rI   rJ   r   r   r
   r   )r   locr   r    s       r!   test_cache_markupz)XHTMLSerializerTestCase.test_cache_markupp  s    &,uuww(?E +{C8 *eEllC8 ,uuww(?E +vj'9'93? *eEllC8: ; ; }t05  7 7EvNNNNNr#   N)r\   r]   r^   rd   rg   rl   rn   rs   rv   ry   r{   r}   r   r   r   r   r   rL   rP   r   r   r   r_   r#   r!   ra   ra      sH       ! ! !! ! !P P P
P P P
Q Q Q< < <K K K
  ' ' '' ' '' ' '' ' '' ' '' ' '  0  0C C CB B B

O 
O 
O 
O 
Or#   ra   c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )HTMLSerializerTestCasec                     d}t          |                              t          d           }|                     d|           d S )Nri   r%   <p lang="en">English text</p>r   r   r   r   rY   s      r!   rl   z$HTMLSerializerTestCase.test_xml_lang  sB    2T!!.4!@@8&AAAAAr#   c                     d}t          |                              t          d           }|                     d|           d S )Nrj   r%   r   r   rY   s      r!   rn   z*HTMLSerializerTestCase.test_xml_lang_nodup  sB    <T!!.4!@@8&AAAAAr#   c                     d}t          d|z            }|                    t          d           }|                     d|z  |           d S rp   r   rq   s       r!   rs   z/HTMLSerializerTestCase.test_textarea_whitespace  sQ    :9GCDD~===GPPPPPr#   c                     d}t          d|z            }|                    t          d           }|                     d|z  |           d S ru   r   rq   s       r!   rv   z*HTMLSerializerTestCase.test_pre_whitespace  sO    C_w.//~==72F;;;;;r#   c                     d}t          |                              t          d           }|                     d|           d S rx   r   rY   s      r!   ry   z%HTMLSerializerTestCase.test_xml_space  sB    LT!!.4!@@A6JJJJJr#   c                     d}t          |                              t          d           }|                     d|           d S )Nz<script src="foo.js" />r%   z<script src="foo.js"></script>r   rY   s      r!   r{   z(HTMLSerializerTestCase.test_empty_script  sB    (T!!.4!@@96BBBBBr#   c                     d}t          |                              t          d           }|                     d|           d S )Nz0<script>if (1 &lt; 2) { alert("Doh"); }</script>r%   z-<script>if (1 < 2) { alert("Doh"); }</script>r   rY   s      r!   r}   z+HTMLSerializerTestCase.test_script_escaping  M    AT!!.4!@@H	! 	! 	! 	! 	!r#   c                     d}t          |                              t          d           }|                     d|           d S )Nzk<script xmlns="http://www.w3.org/1999/xhtml">
            if (1 &lt; 2) { alert("Doh"); }
        </script>r%   zC<script>
            if (1 < 2) { alert("Doh"); }
        </script>r   rY   s      r!   r   z:HTMLSerializerTestCase.test_script_escaping_with_namespace  sS     T!!.4!@@ 	 	 	 	 	r#   c                     d}t          |                              t          d           }|                     d|           d S )Nz0<style>html &gt; body { display: none; }</style>r%   z-<style>html > body { display: none; }</style>r   rY   s      r!   r   z*HTMLSerializerTestCase.test_style_escaping  r   r#   c                     d}t          |                              t          d           }|                     d|           d S )Nzk<style xmlns="http://www.w3.org/1999/xhtml">
            html &gt; body { display: none; }
        </style>r%   zC<style>
            html > body { display: none; }
        </style>r   rY   s      r!   r   z9HTMLSerializerTestCase.test_style_escaping_with_namespace  sS     T!!.4!@@ 	 	 	 	 	r#   c                     t          d          }|                    t          t          j        d           }|                     d|           d S r   )r   r   r   r	   r   r   r   s      r!   r   z)HTMLSerializerTestCase.test_html5_doctype  sN    &''~w}(,  . .96BBBBBr#   N)r\   r]   r^   rl   rn   rs   rv   ry   r{   r}   r   r   r   r   r_   r#   r!   r   r   }  s        B B B
B B B
Q Q Q< < <K K K
C C C
! ! !  ! ! !  C C C C Cr#   r   c                        e Zd Zd Zd Zd ZdS )EmptyTagFilterTestCasec                     t          d          t                      z  }|                     t          j        gd |D                        d S )Nz<elem></elem>c                     g | ]
}|d          S r   r_   .0evs     r!   
<listcomp>z5EmptyTagFilterTestCase.test_empty.<locals>.<listcomp>  s    1I1I1IB"Q%1I1I1Ir#   )r   r   r   EMPTYr   r   s     r!   
test_emptyz!EmptyTagFilterTestCase.test_empty  sK    _%%(8(88../1I1I&1I1I1IJJJJJr#   c                     t          d          t                      z  }|                     t          j        t          j        t          j        gd |D                        d S )Nz<elem>foo</elem>c                     g | ]
}|d          S r   r_   r   s     r!   r   z<EmptyTagFilterTestCase.test_text_content.<locals>.<listcomp>      111B"Q%111r#   )r   r   r   r   rH   rI   rJ   r   s     r!   test_text_contentz(EmptyTagFilterTestCase.test_text_content  s]    '((>+;+;;&,VZ@11&111	3 	3 	3 	3 	3r#   c                     t          d          t                      z  }|                     t          j        t          j        t          j        t          j        gd |D                        d S )Nz<elem><sub /><sub /></elem>c                     g | ]
}|d          S r   r_   r   s     r!   r   z<EmptyTagFilterTestCase.test_elem_content.<locals>.<listcomp>  r   r#   )r   r   r   r   rH   r   rJ   r   s     r!   test_elem_contentz(EmptyTagFilterTestCase.test_elem_content  sf    233n6F6FF&,(<(.
<11&111	3 	3 	3 	3 	3r#   N)r\   r]   r^   r   r   r   r_   r#   r!   r   r     sD        K K K3 3 3
3 3 3 3 3r#   r   c                  <   t          j                    } |                     t           j                            t
                               |                     t           j                            t                               |                     t           j                            t                               |                     t           j                            t                               |                     t          t          j                             | S )N)unittest	TestSuiteaddTestdefaultTestLoaderloadTestsFromTestCaser   ra   r   r   r   r
   r]   )suites    r!   r   r     s      E	MM(,BBCXYYZZZ	MM(,BBCZ[[\\\	MM(,BBCYZZ[[[	MM(,BBCYZZ[[[	MM- 899:::Lr#   __main__r   )defaultTest)r   genshi.corer   r   r   r   genshi.inputr   r   genshi.outputr	   r
   r   r   r   genshi.tests.utilsr   TestCaser   ra   r   r   r   r\   mainr_   r#   r!   <module>r      s    4 4 4 4 4 4 4 4 4 4 4 4 " " " " " " " "9 9 9 9 9 9 9 9 9 9 9 9 9 9 , , , , , ,s' s' s' s' s'H- s' s' s'lmO mO mO mO mOh/ mO mO mO`DC DC DC DC DCX. DC DC DCN3 3 3 3 3X. 3 3 3$   zHMg&&&&&& r#   