o
    þâf¶ø  ã                   @   sÈ   d dl Z d dlZd dlZdZdZdZdZdZdZdZ	d	Z
G d
d„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZdd„ Zdd„ Zdd„ Zdd„ Zedkrbeƒ  dS dS )é    Na  <?xml version="1.0"?>
<root xmlns:meld="https://github.com/Supervisor/supervisor">
  <list meld:id="list">
    <item meld:id="item">
       <name meld:id="name">Name</name>
       <description meld:id="description">Description</description>
    </item>
  </list>
</root>z•<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:meld="https://github.com/Supervisor/supervisor">
   <body meld:id="body">Hello!</body>
</html>zŠ<html>
  <body>
    <area/><base/><basefont/><br/><col/><frame/><hr/><img/><input/><isindex/>
    <link/><meta/><param/>
  </body>
</html>a?  <html>
  <body>
  <tag selected="true"/>
  <tag checked="true"/>
  <tag compact="true"/>
  <tag declare="true"/>
  <tag defer="true"/>
  <tag disabled="true"/>
  <tag ismap="true"/>
  <tag multiple="true"/>
  <tag nohref="true"/>
  <tag noresize="true"/>
  <tag noshade="true"/>
  <tag nowrap="true"/>
  </body>
</html>z^
<html>
<head></head>
<body>
  <!-- test entity references -->
  <p>&nbsp;</p>
</body>
</html>a:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:meld="https://github.com/Supervisor/supervisor"
      xmlns:bar="http://foo/bar">
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
    <title meld:id="title">This will be escaped in html output: &amp;</title>
    <script>this won't be escaped in html output: &amp;</script>
    <script type="text/javascript">
            //<![CDATA[
              // this won't be escaped in html output
              function match(a,b) {
                 if (a < b && a > 0) then { return 1 }
                }
             //]]>
    </script>
    <style>this won't be escaped in html output: &amp;</style>
  </head>
  <!-- a comment -->
  <body>
    <div bar:baz="slab"/>
    <div meld:id="content_well">
      <form meld:id="form1" action="." method="POST">
      <img src="foo.gif"/>
      <table border="0" meld:id="table1">
        <tbody meld:id="tbody">
          <tr meld:id="tr" class="foo">
            <td meld:id="td1">Name</td>
            <td meld:id="td2">Description</td>
          </tr>
        </tbody>
      </table>
      <input type="submit" name="submit" value=" Next "/>
      </form>
    </div>
  </body>
</html>a  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <title meld:id="title">test doc</title>
</head>
<body>
 <!-- comment! -->
 Oh yeah...<br>
<br>
<table style="text-align: left; width: 100px;" border="1" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td>Yup</td>
      <td>More </td>
      <td>Stuff</td>
      <td>Oh Yeah</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
      <td>4</td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tbody>
</table>
<br>
<a href=".">And an image...</a><br>
<br>
<img style="width: 2048px; height: 1536px;" alt="dumb" src="IMG_0102.jpg">
</body>
</html>aO  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
 <title>Emergency Contacts</title>
</head>
<body>
   <div class="header">Emergency Contacts</div>

   <form action="." method="POST">
    <table>

      <tbody meld:id="tbody">

	<tr>
	  <th>Title</th>
	  <td>
	    <input type="text" name="honorific" size="6" value=""
		   meld:id="honorific"/>
	  </td>
	</tr>

	<tr>
	  <th>First Name</th>
	  <td>
	    <input type="text" name="firstname" size="20" value=""
		   meld:id="firstname"/>
	  </td>
	</tr>

	<tr>
	  <th>Middle Name</th>
	  <td>
	    <input type="text" name="middlename" size="15" value=""
		   meld:id="middlename"/>
	  </td>
	</tr>

	<tr>
	  <th>Last Name</th>
	  <td>
	    <input type="text" name="lastname" size="20" value=""
		   meld:id="lastname"/>
	  </td>
	</tr>

	<tr>

	  <th>Suffix</th>
	  <td style="width: 554px;">
          <select name="suffix" meld:id="suffix">
	      <option value="Jr.">Jr.</option>
	      <option value="Sr.">Sr.</option>
	      <option value="III">III</option>
	    </select>
          </td>

        </tr>

	<tr>
	  <th>Address 1</th>
	  <td>
	    <input type="text" name="address1" size="30" value=""
		   meld:id="address1"/>
	  </td>
	</tr>

	<tr>
	  <th>Address 2</th>
	  <td>
	    <input type="text" name="address2" size="30" value=""
		   meld:id="address2"/>
	  </td>
	</tr>

	<tr>
	  <th>City</th>
	  <td>
	    <input type="text" name="city" size="20" value=""
		   meld:id="city"/>
	  </td>
	</tr>

	<tr>
	  <th>State</th>
	  <td>
	    <input type="text" name="state" size="5" value=""
		   meld:id="state"/>
	  </td>
	</tr>

	<tr>
	  <th>ZIP</th>
	  <td>
	    <input type="text" name="zip" size="8" value=""
		   meld:id="zip"/>
	  </td>
	</tr>

	<tr>
	  <th>Home Phone</th>
	  <td>
	    <input type="text" name="homephone" size="12" value=""
		   meld:id="homephone"/>
	  </td>
	</tr>

	<tr>
	  <th>Cell/Mobile Phone</th>
	  <td>
	    <input type="text" name="cellphone" size="12" value=""
		   meld:id="cellphone"/>
	  </td>
	</tr>

	<tr>
	  <th>Email Address</th>
	  <td>
	    <input type="text" name="email" size="20" value=""
		   meld:id="email"/>
	  </td>
	</tr>

	<tr>
	  <th>Over 18? (Checkbox Boolean)</th>
	  <td>
            <input type="checkbox" name="over18" meld:id="over18"
                   value="true" checked="true"/>
	  </td>
	</tr>

	<tr>

	  <th>Mail OK? (Checkbox Ternary)</th>
          <td style="width: 554px;" meld:id="mailok:inputgroup">
            <input type="hidden" name="mailok:default"
                   value="false"/>
            <input type="checkbox" name="mailok"
                   value="true" checked/>
            <input type="checkbox" name="mailok"
                   value="false"/>
          </td>

        </tr>

	<tr>

	  <th>Favorite Color (Radio)</th>
          <td style="width: 554px;" meld:id="favorite_color:inputgroup">
            Red   <input type="radio" name="favorite_color"
                         value="Red"/>
            Green <input type="radio" name="favorite_color"
                         value="Green"/>
            Blue  <input type="radio" name="favorite_color"
                         value="Blue"/>
          </td>

        </tr>

	<tr>
	  <th></th>
	  <td>
	    <input type="submit" value=" Update " name="edit:method" />
	  </td>
	</tr>

      </tbody>
    </table>
    </form>

<p><a href="..">Return to list</a></p>
</body>
</html>
c                   @   s„   e 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S ) ÚMeldAPITestsc                 C   ó   ddl m} ||ƒS ©Nr   ©Úparse_xmlstring©Úsupervisor.templatingr   )ÚselfÚstringr   © r   úS/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_templating.pyÚ_makeElement8  ó   zMeldAPITests._makeElementc                 C   r   ©Nr   ©Úparse_htmlstring©r   r   )r	   r
   r   r   r   r   Ú_makeElementFromHTML<  r   z!MeldAPITests._makeElementFromHTMLc                 C   s>   |   t¡}| d¡}|  |jd¡ | d¡}|  |jd¡ d S )NÚitemÚnameÚName)r   Ú_SIMPLE_XMLÚfindmeldÚassertEqualÚtagÚtext)r	   Úrootr   r   r   r   r   Útest_findmeld@  s
   


zMeldAPITests.test_findmeldc                 C   sP   |   t¡}| d¡}|  |jd¡ | dd¡}|  |d¡ |  | d¡d ¡ d S )Nr   ÚunknownÚfoo)r   r   r   r   r   )r	   r   r   r   r   r   r   Útest_findmeld_defaultG  s   

z"MeldAPITests.test_findmeld_defaultc                 C   s’   |   t¡}| d¡}|  |jd¡ dddœdddœg}| |¡D ]\}}|d | d¡_|d | d¡_q |  |d	 jd¡ |  |d
 jd¡ d S )Nr   úJeff BuckleyÚethereal©r   ÚdescriptionÚSlipknotÚheavyr   r$   r   é   ©r   r   r   r   r   Úrepeatr   )r	   r   r   ÚdataÚelementÚdr   r   r   Útest_repeat_nochildO  s   

ÿz MeldAPITests.test_repeat_nochildc                 C   sÈ   |   t¡}| d¡}|  |jd¡ dddœdddœg}| |d¡D ]\}}|d | d¡_|d	 | d	¡_q!|  |d
 d
 jd¡ |  |d
 d jd¡ |  |d d
 jd¡ |  |d d jd¡ d S )NÚlistr!   r"   r#   r%   r&   r   r   r$   r   r'   r(   )r	   r   r.   r*   r+   r,   r   r   r   Útest_repeat_child[  s   

ÿzMeldAPITests.test_repeat_childc                 C   sL   |   t¡}|dddœ  | d¡}|  |jd¡ | d¡}|  |jd¡ d S )Nr   Úbar)r$   r   r   r$   )r   r   r   r   r   )r	   r   r   Údescr   r   r   Útest_modi  s   


zMeldAPITests.test_modc                 C   sJ   |   t¡}|jdi dddœ¤Ž}| d¡}|  |jd¡ |  |dg¡ d S )Nr   Úa)r$   Újammyjamr$   r4   r   )r   r   Ú	fillmeldsr   r   r   )r	   r   Úunfilledr1   r   r   r   Útest_fillmeldsq  s
   

zMeldAPITests.test_fillmeldsc           	      C   s  i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “i dd“dd!“dd"“dd#“d	d$“dd%“dd&“dd'“dd(“dd)“dd*“dd+“dd,“dd-“dd.“dd/“i dd!“dd"“dd#“d	d$“dd%“dd&“dd'“dd(“dd)“dd*“dd+“dd0“dd-“dd.“dd1“d2d3“g}|   t¡}| ¡ }|jd9i |d4 ¤Ž}|  |g ¡ |  | d¡jd5 d¡ |  | d¡jd5 d¡ | d¡}|  |jd5 d¡ | d¡}|  |d3 jd6 d6¡ |  | d¡jd7 d7¡ | d¡}|  |d3 jd7 d7¡ | d¡}|  |d3 jd7 d7¡ | ¡ }|jd9i |d3 ¤Ž}|  |dg¡ |  | d¡j d7¡d ¡ | d¡}|  |d8 jd7 d7¡ |  |d3 j d7¡d ¡ | ¡ }|jd9i |d8 ¤Ž}|  t|ƒd2dg¡ |  | d¡j	d ¡ | d¡}|  |d8 jd7 d7¡ |  |d3 j d7¡d ¡ d S ):NÚ	honorificzMr.Ú	firstnameÚChrisÚ
middlenameÚPhillipsÚlastnameÚ	McDonoughÚaddress1z802 Caroline St.Úaddress2zApt. 2BÚcityÚFredericksburgÚstateÚVAÚzipÚ22401Ú	homephonez555-1212Ú	cellphonez555-1313Úemailzuser@example.comÚsuffixzSr.Úover18Tzmailok:inputgroupÚtruezfavorite_color:inputgroupÚGreenÚFredÚ ÚRogersz1 Imaginary LanezApt. 3AzNever Never LandÚLAÚ00001z555-1111z555-4444zfred@neighborhood.comzJr.FÚfalseÚYellowÚIVÚBlueÚnottherer'   r   ÚvalueÚselectedÚcheckedé   r   )
r   Ú_FILLMELDFORM_HTMLÚcloneÚfillmeldhtmlformr   r   ÚattribÚgetÚsortedr   )	r	   r*   r   r]   r6   r;   rJ   ÚmailokÚfavoritecolorr   r   r   Útest_fillmeldhtmlformx  sâ   ÿÿþþþýýýüüüûûÿÿþþþýýýüüüûûÿÿþþþýýýüüüûûúó






z"MeldAPITests.test_fillmeldhtmlformc                 C   sX   ddl m} |  t¡}| d¡}| d¡ |d }|  |j|¡ |  t| 	¡ ƒd¡ d S )Nr   ©ÚReplacer.   úthis is a textual replacementr'   )
r   rf   r   r   r   Úreplacer   r   ÚlenÚgetchildren)r	   rf   r   ÚLÚRr   r   r   Ú!test_replace_removes_all_elements¯  s   


z.MeldAPITests.test_replace_removes_all_elementsc                 C   s  ddl m} |  t¡}| d¡}| d¡ |  t| ¡ ƒd¡ |d }|  |j	d¡ |  t| ¡ ƒd¡ |d }|  |j	d¡ |  t| ¡ ƒd¡ |d }|  |j	d	¡ |  t| ¡ ƒd¡ |d }|  |j	|¡ |  |j
d¡ |  t| ¡ ƒd¡ |  |jd
¡ d S ©Nr   re   r$   rg   r'   r.   r   r[   r   F)r   rf   r   r   r   rh   r   ri   rj   r   r   Ú	structure)r	   rf   r   ÚDrk   ÚIÚNr   r   r   Ú'test_replace_replaces_the_right_element¸  s&   


z4MeldAPITests.test_replace_replaces_the_right_elementc                 C   s*  ddl m} |  t¡}| d¡}| d¡ |  t| ¡ ƒd¡ |d }|  |j	d¡ |  t| ¡ ƒd¡ |d }|  |j	d¡ |  t| ¡ ƒd¡ |d }|  |j	d	¡ |  t| ¡ ƒd¡ |d }|  |j	d¡ |  |j
d ¡ |  t| ¡ ƒd¡ |d }|  |j	|¡ |  |j
d¡ |  |jd
¡ d S rn   )r   rf   r   r   r   Úcontentr   ri   rj   r   r   ro   )r	   rf   r   rp   rk   rq   rr   ÚTr   r   r   Útest_contentÍ  s,   


zMeldAPITests.test_contentc                 C   s\   ddl m} |  t¡}| d¡}|jddddd |  |jd	dd
ddddddd|di¡ d S )Nr   ©Ú_MELD_IDÚform1r0   Ú1Ú2ú#)r   ÚbazÚgÚactionr   r}   r~   ÚmethodÚPOSTr   )r   rx   r   Ú_COMPLEX_XHTMLr   Ú
attributesr   r_   )r	   rx   r   rp   r   r   r   Útest_attributeså  s   


ýzMeldAPITests.test_attributesc                 C   s|   ddl m} ddlm} |  t¡}| d¡}|j|ddd|dddd	 |  |j	d
|dddddd|ddd|di¡ d S )Nr   rw   ©Ú	as_stringry   r0   Úlatin1©Úencodingr|   )r   r   r   r€   r   r   )
r   rx   Úsupervisor.compatr†   r   r‚   r   rƒ   r   r_   )r	   rx   r†   r   rp   r   r   r   Útest_attributes_unicodeï  s   


ÿ
ýz$MeldAPITests.test_attributes_unicodec                 C   s    |   d¡}| jt|jdd d S )Nú<root></root>r'   )r   )r   ÚassertRaisesÚ
ValueErrorrƒ   )r	   r   r   r   r   Ú$test_attributes_nonstringtype_raisesû  s   
z1MeldAPITests.test_attributes_nonstringtype_raisesN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r-   r/   r2   r7   rd   rm   rs   rv   r„   r‹   r   r   r   r   r   r   7  s     7	
r   c                   @   sü   e 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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=S )>ÚMeldElementInterfaceTestsc                 C   s   ddl m} |S )Nr   )Ú_MeldElementInterface)r   r”   )r	   r”   r   r   r   Ú_getTargetClass   s   z)MeldElementInterfaceTests._getTargetClassc                 O   s   |   ¡ }||i |¤ŽS ©N)r•   )r	   ÚargÚkwÚklassr   r   r   Ú_makeOne  s   z"MeldElementInterfaceTests._makeOnec                 C   s”  |   di ¡}ddlm} |   d|di¡}|   d|di¡}|   d|di¡}|   d|di¡}| |¡ | |¡ | |¡ | |¡ dd	d
œddd
œg}| |¡D ]\}}	|	d | d¡_|	d | d¡_qO|  t|ƒd¡ |d }
|  t|
ƒd¡ |
d }|  t|ƒd¡ |d }|d }|  |jd¡ |  |jd	¡ |d }|  t|ƒd¡ |d }|  t|ƒd¡ |d }|d }|  |jd¡ |  |jd¡ d S )Nr   r   rw   r   Úrecordr   r$   r!   r"   r#   r%   r&   r[   r'   )	rš   r   rx   Úappendr)   r   r   r   ri   )r	   r   rx   r   r›   r   r$   r*   r+   r,   Úitem1Úrecord1Úname1Údesc1Úitem2Úrecord2Úname2Údesc2r   r   r   Útest_repeat  sB   



ÿz%MeldElementInterfaceTests.test_repeatc                 C   s~   |   dddi¡}| d¡ |  t|jƒd¡ |jd }|  |j|¡ |  |jd¡ |  |jd¡ ddlm	} |  |j
|¡ d S )	NÚdivÚidÚthedivÚhellor'   r   Fre   ©rš   rt   r   ri   Ú	_childrenÚparentr   ro   r   rf   r   ©r	   ÚelÚreplacenoderf   r   r   r   Útest_content_simple_nostructure/  s   

z9MeldElementInterfaceTests.test_content_simple_nostructurec                 C   s‚   |   dddi¡}|jddd |  t|jƒd¡ |jd }|  |j|¡ |  |jd¡ |  |jd¡ dd	lm	} |  |j
|¡ d S )
Nr¦   r§   r¨   r©   T©ro   r'   r   re   rª   r­   r   r   r   Útest_content_simple_structure:  s   
z7MeldElementInterfaceTests.test_content_simple_structurec                 C   s2   ddl m} |  d|di¡}|  | d¡|¡ d S )Nr   rw   r¦   r¨   )r   rx   rš   r   r   )r	   rx   r®   r   r   r   Útest_findmeld_simpleE  s   z.MeldElementInterfaceTests.test_findmeld_simplec                 C   sL   ddl m} |  d|di¡}|  d|di¡}| |¡ |  | d¡|¡ d S )Nr   rw   r¦   r¨   ÚspanÚthespan©r   rx   rš   rœ   r   r   )r	   rx   r®   r´   r   r   r   Ú!test_findmeld_simple_oneleveldownJ  s
   
z;MeldElementInterfaceTests.test_findmeld_simple_oneleveldownc                 C   sf   ddl m} |  d|di¡}|  d|di¡}|  d|di¡}| |¡ | |¡ |  | d¡|¡ d S )	Nr   rw   r¦   r¨   r´   rµ   r3   Úthear¶   )r	   rx   r®   r´   r3   r   r   r   Ú"test_findmeld_simple_twolevelsdownQ  s   

z<MeldElementInterfaceTests.test_findmeld_simple_twolevelsdownc                 C   sB   |   dddi¡}|  |jd ¡ |  |jd¡ |  |jddi¡ d S )Nr¦   r§   r¨   )rš   r   r¬   r   r_   )r	   Úifacer   r   r   Ú	test_ctorZ  s   z#MeldElementInterfaceTests.test_ctorc                 C   s<   |   dddi¡}| ¡ }|  t|ƒd¡ |  |d |¡ d S )Nr¦   r§   r¨   r'   r   )rš   Úgetiteratorr   ri   )r	   r¦   Úiteratorr   r   r   Útest_getiterator_simple`  s   z1MeldElementInterfaceTests.test_getiterator_simplec                 C   sÂ   |   dddi¡}|   di ¡}|   dddi¡}|   dddi¡}d|_d	|_| |¡ | |¡ | |¡ | ¡ }|  t|ƒd
¡ |  |d |¡ |  |d |¡ |  |d |¡ |  |d |¡ d S )Nr¦   r§   r¨   r´   r{   Úspan3Ú3Úabcú  é   r   r'   r[   é   ©rš   r   Útailrœ   r¼   r   ri   ©r	   r¦   r´   Úspan2r¿   Úitr   r   r   Útest_getiteratorf  s   


z*MeldElementInterfaceTests.test_getiteratorc                 C   sÆ   |   dddi¡}|   di ¡}|   dddi¡}|   dddi¡}d|_d	|_| |¡ | |¡ | |¡ |jdd
}|  t|ƒd¡ |  |d |¡ |  |d |¡ |  |d |¡ |  |d |¡ d S )Nr¦   r§   r¨   r´   r{   r¿   rÀ   rÁ   rÂ   )r   rÃ   r   r'   r[   rÄ   rÅ   rÇ   r   r   r   Útest_getiterator_tag_ignoredx  s   


z6MeldElementInterfaceTests.test_getiterator_tag_ignoredc                 C   sJ   |   dddi¡}|   di ¡}| |¡ |  |d jd¡ |  |j|¡ d S )Nr¦   r§   r¨   r´   r   )rš   rœ   r   r   r¬   ©r	   r¦   r´   r   r   r   Útest_appendŠ  s
   
z%MeldElementInterfaceTests.test_appendc                 C   s|   |   dddi¡}|   di ¡}|   dddi¡}| |¡ ||d< |  |d jd¡ |  |d jddi¡ |  |d j|¡ d S )Nr¦   r§   r¨   r´   r{   r   )rš   rœ   r   r   r_   r¬   ©r	   r¦   r´   rÈ   r   r   r   Útest__setitem__‘  s   
z)MeldElementInterfaceTests.test__setitem__c                 C   s¶   |   dddi¡}|   di ¡}|   dddi¡}| |¡ | d|¡ |  |d jd¡ |  |d jddi¡ |  |d j|¡ |  |d jd¡ |  |d ji ¡ |  |d j|¡ d S )Nr¦   r§   r¨   r´   r{   r   r'   )rš   rœ   Úinsertr   r   r_   r¬   rÎ   r   r   r   Útest_insert›  s   
z%MeldElementInterfaceTests.test_insertc                 C   s>   |   dddi¡}d|_d|_|   di ¡}| |¡ | ¡  d S )Nr¦   r§   r¨   rÁ   z   r´   )rš   r   rÆ   rœ   r]   rÌ   r   r   r   Útest_clone_simple¨  s   
z+MeldElementInterfaceTests.test_clone_simplec                 C   s"  |   dddi¡}|   di ¡}|   dddi¡}|   dddi¡}d|_d	|_| |¡ | |¡ | |¡ | ¡ }|  |j|j¡ |  |j|j¡ |  |d
 j|d
 j¡ |  |d
 j|d
 j¡ |  |d
 d
 j|d
 d
 j¡ |  |d
 d
 j|d
 d
 j¡ |  |d
 d
 d
 j|d
 d
 d
 j¡ |  |d
 d
 d
 j|d
 d
 d
 j¡ |  |d
 d
 d
 j|d
 d
 d
 j¡ |  |d
 d
 d
 j|d
 d
 d
 j¡ |  t	|ƒt	|ƒ¡ |  t	|d
 ƒt	|d
 ƒ¡ |  t	|d
 d
 ƒt	|d
 d
 ƒ¡ |  t	|d
 d
 d
 ƒt	|d
 d
 d
 ƒ¡ d S )Nr¦   r§   r¨   r´   r{   r¿   rÀ   rÁ   rÂ   r   )
rš   r   rÆ   rœ   r]   r   r   r_   ÚassertNotEqualr§   )r	   r¦   r´   rÈ   r¿   Údiv2r   r   r   Ú
test_clone°  s0   


  (((($0z$MeldElementInterfaceTests.test_clonec                 C   s4   |   di ¡}|  |jd ¡ | ¡  |  |jd ¡ d S )Nr¦   )rš   r   r¬   Údeparent)r	   r¦   r   r   r   Útest_deparent_noparentÌ  s   z0MeldElementInterfaceTests.test_deparent_noparentc                 C   s†   |   di ¡}|  |jd ¡ |   di ¡}| |¡ |  |jd ¡ |  |j|¡ |  |d |¡ | ¡  |  |jd ¡ |  t|jd¡ d S )Nr¬   Úchildr   )rš   r   r¬   rœ   rÖ   r   Ú
IndexErrorÚ__getitem__)r	   r¬   rØ   r   r   r   Útest_deparent_withparentÒ  s   
z2MeldElementInterfaceTests.test_deparent_withparentc                 C   s†   |   di ¡}|   di ¡}|   di ¡}|   di ¡}|||f}||dd…< |  |j|¡ |  |j|¡ |  |j|¡ |  |jt|ƒ¡ d S )Nr¬   Úchild1Úchild2Úchild3r   r[   )rš   r   r¬   r«   r.   ©r	   r¬   rÜ   rÝ   rÞ   Úchildrenr   r   r   Útest_setsliceÞ  s   
z'MeldElementInterfaceTests.test_setslicec                 C   s   |   di ¡}|   di ¡}|   di ¡}|   di ¡}|||f}||dd…< |dd…= |  |jd ¡ |  |jd ¡ |  |j|¡ |  t|jƒd¡ d S )Nr¬   rÜ   rÝ   rÞ   r   r[   r'   )rš   r   r¬   ri   r«   rß   r   r   r   Útest_delsliceê  s   

z'MeldElementInterfaceTests.test_delslicec                 C   sP   |   di ¡}|   di ¡}| |¡ | |¡ |  |jd ¡ |  t|jƒd¡ d S )Nr¬   rÜ   r   )rš   rœ   Úremover   r¬   ri   r«   )r	   r¬   rÜ   r   r   r   Útest_remove÷  s   

z%MeldElementInterfaceTests.test_removec                 C   sÊ  ddl m} |  d|di¡}|  d|di¡}|  d|di¡}|  d|di¡}|  d|d	i¡}|  d|d
i¡}|  d|di¡}|  di ¡}	|  d|di¡}
| |¡ | |¡ | |¡ | |	¡ |	 |¡ | |¡ | |¡ | |
¡ dd„ }|  || ¡ ƒdg¡ |  || ¡ ƒddg¡ |  || ¡ ƒg d¢¡ |  || ¡ ƒg d¢¡ |  ||	 ¡ ƒg d¢¡ |  || ¡ ƒg d¢¡ |  || ¡ ƒg d¢¡ |  || ¡ ƒg d¢¡ |  ||
 ¡ ƒddg¡ d S )Nr   rw   r¦   Údiv1r´   Úspan1rÈ   r¿   Úspan4Úspan5Úspan6rÔ   c                 S   s   dd„ | D ƒS )Nc                 S   ó   g | ]}|  ¡ ‘qS r   ©Úmeldid©Ú.0Úxr   r   r   Ú
<listcomp>  ó    zGMeldElementInterfaceTests.test_lineage.<locals>.ids.<locals>.<listcomp>r   )rk   r   r   r   Úids  s   z3MeldElementInterfaceTests.test_lineage.<locals>.ids)rÈ   ræ   rå   )r¿   rÈ   ræ   rå   )Nr¿   rÈ   ræ   rå   )rç   Nr¿   rÈ   ræ   rå   )rè   rç   Nr¿   rÈ   ræ   rå   )ré   rè   rç   Nr¿   rÈ   ræ   rå   )r   rx   rš   rœ   r   Úlineage)r	   rx   rå   ræ   rÈ   r¿   rç   rè   ré   r   rÔ   rò   r   r   r   Útest_lineageÿ  s8   







z&MeldElementInterfaceTests.test_lineagec                 C   s†   ddl m} |  dddi¡}|  di ¡}|  dddi¡}|  dddi¡}| |¡ | |¡ | |¡ | ¡ }|  ||d	d
d¡ d S )Nr   ©Úas_bytesr¦   r§   rå   r´   r{   rÔ   zM<div id="div1"><span><span id="2"></span></span><div2 id="div2"></div2></div>r‡   rˆ   )rŠ   rö   rš   rœ   Ú	shortreprr   )r	   rö   r¦   r´   rÈ   rÔ   Úrr   r   r   Útest_shortrepr)  s   


ÿÿz(MeldElementInterfaceTests.test_shortreprc                 C   s@   ddl m} ddlm} |tƒ}| ¡ }|  ||ddd¡ d S )Nr   r   rõ   z—<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
     [...]
</head>
  <!--  a comment  -->
   [...]
</html>r‡   rˆ   )r   r   rŠ   rö   r‚   r÷   r   )r	   r   rö   r   rø   r   r   r   Útest_shortrepr27  s   ùÿz)MeldElementInterfaceTests.test_shortrepr2c                    s˜  ddl m} ddl m‰  |tƒ}| ¡ }|  dˆ di¡}| |¡ | d¡}| ¡  | d¡}| ¡  | |¡ | 	|¡}|d }‡ fd	d
„|d D ƒ}	‡ fdd
„|d D ƒ}
‡ fdd
„|d D ƒ}|	 
¡  |
 
¡  | 
¡  |  |	dg¡ |  |
g d¢¡ |  |dg¡ |d }‡ fdd
„|d D ƒ}	‡ fdd
„|d D ƒ}
‡ fdd
„|d D ƒ}|	 
¡  |
 
¡  | 
¡  |  |	dg¡ |  |
dg¡ |  |dg¡ d S )Nr   r   rw   r¦   ÚnewdivÚtrÚtitleÚ	unreducedc                    ó   g | ]}|j ˆ  ‘qS r   ©r_   rí   rw   r   r   rð   V  ó    z<MeldElementInterfaceTests.test_diffmeld1.<locals>.<listcomp>Úaddedc                    rÿ   r   r   rí   rw   r   r   rð   W  r  Úremovedc                    rÿ   r   r   rí   rw   r   r   rð   X  r  Úmoved)Útd1Útd2rü   Úreducedc                    rÿ   r   r   rí   rw   r   r   rð   b  r  c                    rÿ   r   r   rí   rw   r   r   rð   c  r  c                    rÿ   r   r   rí   rw   r   r   rð   d  r  )r   r   rx   r‚   r]   rš   rœ   r   rÖ   ÚdiffmeldÚsortr   )r	   r   r   r]   r¦   rü   rý   ÚdiffÚchangesÚ	addedtagsÚremovedtagsÚ	movedtagsr   rw   r   Útest_diffmeld1F  s@   




z(MeldElementInterfaceTests.test_diffmeld1c           	      C   s  d}d}ddl m} ||ƒ}||ƒ}| |¡}dd„ |d d D ƒ}d	g}|  ||¡ d
d„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}d	g}|  ||¡ dd„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}g }|  ||¡ d S )Nzi
        <root>
          <a meld:id="a">
             <b meld:id="b"></b>
          </a>
        </root>zd
        <root>
          <a meld:id="a"></a>
          <b meld:id="b"></b>
        </root>
        r   r   c                 S   rê   r   rë   rí   r   r   r   rð     rñ   z<MeldElementInterfaceTests.test_diffmeld2.<locals>.<listcomp>rþ   r  Úbc                 S   rê   r   rë   rí   r   r   r   rð   ƒ  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð   ‡  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð   Œ  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð     rñ   c                 S   rê   r   rë   rí   r   r   r   rð   ”  rñ   ©r   r   r  r   ©	r	   ÚsourceÚtargetr   Úsource_rootÚtarget_rootr  ÚactualÚexpectedr   r   r   Útest_diffmeld2l  s0   
z(MeldElementInterfaceTests.test_diffmeld2c           	      C   s(  d}d}ddl m} ||ƒ}||ƒ}| |¡}dd„ |d d D ƒ}d	d
g}|  ||¡ dd„ |d d D ƒ}ddg}|  ||¡ dd„ |d d D ƒ}ddg}|  ||¡ dd„ |d d D ƒ}d	g}|  ||¡ dd„ |d d D ƒ}dg}|  ||¡ dd„ |d d D ƒ}dg}|  ||¡ d S )Nzì
        <root>
          <a meld:id="a">
             <b meld:id="b">
               <c meld:id="c"></c>
             </b>
          </a>
          <z meld:id="z">
            <y meld:id="y"></y>
          </z>
        </root>
        zÙ
        <root>
          <b meld:id="b">
            <c meld:id="c"></c>
          </b>
          <a meld:id="a"></a>
          <d meld:id="d">
             <e meld:id="e"></e>
          </d>
        </root>
        r   r   c                 S   rê   r   rë   rí   r   r   r   rð   ·  rñ   z<MeldElementInterfaceTests.test_diffmeld3.<locals>.<listcomp>rþ   r  r  Úcc                 S   rê   r   rë   rí   r   r   r   rð   »  rñ   r  r,   Úec                 S   rê   r   rë   rí   r   r   r   rð   ¿  rñ   r  ÚzÚyc                 S   rê   r   rë   rí   r   r   r   rð   Ä  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð   È  rñ   c                 S   rê   r   rë   rí   r   r   r   rð   Ì  rñ   r  r  r   r   r   Útest_diffmeld3™  s0   
z(MeldElementInterfaceTests.test_diffmeld3c           	      C   s*  d}d}ddl m} ||ƒ}||ƒ}| |¡}dd„ |d d D ƒ}d	d
g}|  ||¡ dd„ |d d D ƒ}ddg}|  ||¡ dd„ |d d D ƒ}g d¢}|  ||¡ dd„ |d d D ƒ}d	g}|  ||¡ dd„ |d d D ƒ}dg}|  ||¡ dd„ |d d D ƒ}ddg}|  ||¡ d S )Ná!  
        <root>
          <a meld:id="a">
             <b meld:id="b">
               <c meld:id="c">
                 <d meld:id="d"></d>
               </c>
             </b>
          </a>
          <z meld:id="z">
            <y meld:id="y"></y>
          </z>
        </root>
        a  
        <root>
          <p>
            <a meld:id="a">
               <b meld:id="b"></b>
            </a>
          </p>
          <p>
            <m meld:id="m">
              <n meld:id="n"></n>
            </m>
          </p>
        </root>
        r   r   c                 S   rê   r   rë   rí   r   r   r   rð   ó  rñ   z<MeldElementInterfaceTests.test_diffmeld4.<locals>.<listcomp>rþ   r  r3   r  c                 S   rê   r   rë   rí   r   r   r   rð   ÷  rñ   r  ÚmÚnc                 S   rê   r   rë   rí   r   r   r   rð   û  rñ   r  )r  r,   r  r  c                 S   rê   r   rë   rí   r   r   r   rð      rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð     rñ   c                 S   rê   r   rë   rí   r   r   r   rð     rñ   r  r  r  r  r   r   r   Útest_diffmeld4Ð  s0   
z(MeldElementInterfaceTests.test_diffmeld4c           	      C   s  d}d}ddl m} ||ƒ}||ƒ}| |¡}dd„ |d d D ƒ}g d	¢}|  ||¡ d
d„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}ddg}|  ||¡ dd„ |d d D ƒ}g }|  ||¡ dd„ |d d D ƒ}g }|  ||¡ d S )Nr  a}  
        <root>
          <p>
            <a meld:id="a">
               <b meld:id="b">
                 <p>
                   <c meld:id="c">
                     <d meld:id="d"></d>
                   </c>
                 </p>
               </b>
            </a>
          </p>
          <z meld:id="z">
            <y meld:id="y"></y>
          </z>
        </root>
        r   r   c                 S   rê   r   rë   rí   r   r   r   rð   3  rñ   z<MeldElementInterfaceTests.test_diffmeld5.<locals>.<listcomp>rþ   r  )r3   r  r  r,   c                 S   rê   r   rë   rí   r   r   r   rð   7  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð   ;  rñ   r  c                 S   rê   r   rë   rí   r   r   r   rð   @  rñ   r  r3   r  c                 S   rê   r   rë   rí   r   r   r   rð   D  rñ   c                 S   rê   r   rë   rí   r   r   r   rð   H  rñ   r  r  r   r   r   Útest_diffmeld5  s0   
z(MeldElementInterfaceTests.test_diffmeld5N)!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ô   rù   rú   r  r  r  r"  r#  r   r   r   r   r“   ÿ  s>    '	
*&-7<r“   c                   @   sL   e 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S )ÚParserTestsc                 G   ó   ddl m} ||Ž }|S r   r   )r	   Úargsr   r   r   r   r   Ú_parseO  ó   zParserTests._parsec                 G   r%  r   r   )r	   r&  r   r   r   r   r   Ú_parse_htmlT  r(  zParserTests._parse_htmlc                 C   s  ddl m} |  t¡}|  |jd¡ |  |jd ¡ |d }|  |jd¡ |  |j|¡ |  |j| d¡ |d }|  |jd¡ |  |j|¡ |  |j| d¡ |d }|d }|  |jd¡ |  |j|¡ |  |j| d¡ |  |jd¡ |  |j|¡ |  |j| d¡ d S )	Nr   rw   r   r.   r   r'   r   r$   )r   rx   r'  r   r   r   r¬   r_   )r	   rx   r   Úl1str   r   r$   r   r   r   Útest_parse_simple_xmlY  s(   
z!ParserTests.test_parse_simple_xmlc                 C   s†   d}ddl m} |  t¡}|  |j|d ¡ |  |ji ¡ |  |jd ¡ |d }|  |j|d ¡ |  |j| d¡ |  |j|¡ d S )Nú {http://www.w3.org/1999/xhtml}%sr   rw   ÚhtmlÚbody)r   rx   r'  Ú_SIMPLE_XHTMLr   r   r_   r¬   )r	   Úxhtml_nsrx   r   r.  r   r   r   Útest_parse_simple_xhtmlo  s   
z#ParserTests.test_parse_simple_xhtmlc                 C   sl  d}ddl m} |  t¡}|  |j|d ¡ |  |ji ¡ |  |jd ¡ |d }|  |j|d ¡ |  |ji ¡ |  |j|¡ |d }|  |j|d ¡ |  |jd d¡ |  |j|¡ |d	 }|  |j|d
 ¡ |  |j| d
¡ |  |j|¡ |d }|  |j|d ¡ |  |ji ¡ |  |j|¡ |d }|  |j|d ¡ |  |jddi¡ |  |j|¡ |d	 }	|  |	j|d ¡ |  |	j| d¡ |  |	j|¡ |	d }
|  |
j|d ¡ |  |
j| d¡ |  |
jd d¡ |  |
jd d¡ |  |
j|	¡ |
d }|  |j|d ¡ |  |j|
¡ |
d	 }|  |j|d ¡ |  |j| d¡ |  |jd d¡ |  |j|
¡ |d }|  |j|d ¡ |  |j| d¡ |  |j|¡ |d }|  |j|d ¡ |  |j| d¡ |  |jd d¡ |  |j|¡ |d }|  |j|d  ¡ |  |j| d!¡ |  |j|¡ |d	 }|  |j|d  ¡ |  |j| d"¡ |  |j|¡ d S )#Nr,  r   rw   r-  ÚheadÚmetart   útext/html; charset=ISO-8859-1r'   rý   r[   r.  r¦   z{http://foo/bar}bazÚslabÚcontent_wellÚformry   r   Ú.r€   r   ÚimgÚtableÚtable1ÚborderÚ0Útbodyrü   Úclassr   Útdr  r  )r   rx   r'  r‚   r   r   r_   r¬   )r	   r0  rx   r   r2  r3  rý   r.  rå   rÔ   r7  r9  r:  r>  rü   r  r  r   r   r   Útest_parse_complex_xhtml|  s~   
ÿz$ParserTests.test_parse_complex_xhtmlc                 C   s  ddl m} ddl m} |  t¡}|  |jd¡ |  |ji ¡ |  |jd ¡ |d }|  |jd¡ |  |ji ¡ |  |j|¡ |d }|  |jd¡ |  |jd d¡ |d	 }|  |jd
¡ |  |j| d
¡ |  |j|¡ |d	 }|  |jd¡ |  |ji ¡ |  |j|¡ |d }|  |j|¡ |d }	|  |	jd¡ |  |	jdddddœ¡ |  |	j|¡ |d }
|  |
jd¡ |d }|  |jd¡ d S )Nr   rw   )ÚCommentr-  r2  r3  rt   r4  r'   rý   r.  rÄ   r:  ztext-align: left; width: 100px;rz   r{   )Ústyler<  ÚcellpaddingÚcellspacingé   r3   é   r9  )	r   rx   rB  r)  Ú	_NVU_HTMLr   r   r_   r¬   )r	   rx   rB  r   r2  r3  rý   r.  Úcommentr:  Úhrefr9  r   r   r   Útest_nvu_htmlÆ  sL   
ÿüzParserTests.test_nvu_htmlc                 C   ó    d}d| }|   t| j|¡ d S ©Nz(https://github.com/Supervisor/supervisorzF<html xmlns:meld="%s" meld:id="repeat"><body meld:id="repeat"/></html>)r   rŽ   r'  ©r	   Úmeld_nsÚrepeatedr   r   r   Ú!test_dupe_meldids_fails_parse_xmlð  ó
   ÿz-ParserTests.test_dupe_meldids_fails_parse_xmlc                 C   rL  rM  )r   rŽ   r)  rN  r   r   r   Ú"test_dupe_meldids_fails_parse_htmlö  rR  z.ParserTests.test_dupe_meldids_fails_parse_htmlN)r   r‘   r’   r'  r)  r+  r1  rA  rK  rQ  rS  r   r   r   r   r$  N  s    J*r$  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	UtilTestsc                 C   ó,   ddl m} d}||ƒ}d}|  ||¡ d S )Nr   ©Úinsert_doctyperŒ   z†<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><root></root>©r   rW  r   ©r	   rW  Úorigr  r  r   r   r   Útest_insert_xhtml_doctypeþ  ó
   z#UtilTests.test_insert_xhtml_doctypec                 C   rU  )Nr   rV  ú5<?xml version="1.0" encoding="latin-1"?><root></root>z®<?xml version="1.0" encoding="latin-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><root></root>rX  rY  r   r   r   Ú!test_insert_doctype_after_xmldecl  r\  z+UtilTests.test_insert_doctype_after_xmldeclc                 C   rU  )Nr   )Úinsert_meld_ns_declr]  zk<?xml version="1.0" encoding="latin-1"?><root xmlns:meld="https://github.com/Supervisor/supervisor"></root>)r   r_  r   )r	   r_  rZ  r  r  r   r   r   Útest_insert_meld_ns_decl  r\  z"UtilTests.test_insert_meld_ns_declc                 C   rU  )Nr   ©ÚprefeedzD<?xml version="1.0" encoding="latin-1"?><root xmlns:meld="#"></root>z½<?xml version="1.0" encoding="latin-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><root xmlns:meld="#"></root>©r   rb  r   )r	   rb  rZ  r  r  r   r   r   Ú'test_prefeed_preserves_existing_meld_ns  r\  z1UtilTests.test_prefeed_preserves_existing_meld_nsc                 C   s(   ddl m} d}||ƒ}|  ||¡ d S )Nr   ra  z°<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><root xmlns:meld="https://github.com/Supervisor/supervisor"></root>rc  )r	   rb  rZ  r  r   r   r   Ú'test_prefeed_preserves_existing_doctype  s   z1UtilTests.test_prefeed_preserves_existing_doctypeN)r   r‘   r’   r[  r^  r`  rd  re  r   r   r   r   rT  ü  s    rT  c                   @   sD  e 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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOS )PÚWriterTestsc                 C   ó   ddl m} ||ƒ}|S r   r   )r	   Úxmlr   r   r   r   r   r'  !  r(  zWriterTests._parsec                 C   rg  r   r   )r	   rh  r   r   r   r   r   r)  &  r(  zWriterTests._parse_htmlc                 K   sR   zddl m} W n
   ddlm} Y |ƒ }||fi |¤Ž | d¡ | ¡ }|S )Nr   )ÚBytesIO)ÚStringIO)Úiori  rj  ÚseekÚread)r	   Úfnr˜   ri  Úoutr  r   r   r   Ú_write+  s   
zWriterTests._writec                 K   ó   | j |jfi |¤ŽS r–   )rp  Ú	write_xml©r	   Únoder˜   r   r   r   Ú
_write_xml6  ó   zWriterTests._write_xmlc                 K   rq  r–   )rp  Ú
write_htmlrs  r   r   r   Ú_write_html9  rv  zWriterTests._write_htmlc                 K   rq  r–   )rp  Úwrite_xhtmlrs  r   r   r   Ú_write_xhtml<  rv  zWriterTests._write_xhtmlc                 C   ó<   ddl m} t||ddƒ}t||ddƒ}|  ||¡ d S ©Nr   r…   r‡   rˆ   ©rŠ   r†   Únormalize_xmlr   ©r	   r3   r  r†   r   r   r   ÚassertNormalizedXMLEqual?  ó   z$WriterTests.assertNormalizedXMLEqualc                 C   r{  r|  r}  r  r   r   r   ÚassertNormalizedHTMLEqualE  r  z%WriterTests.assertNormalizedHTMLEqualc                 C   s„   |   t¡}|  |¡}d}|  ||¡ | d¡ d¡D ]\}}t|d ƒ| d¡_t|d ƒ| d¡_q|  |¡}d}|  ||¡ d S )	Nz”<?xml version="1.0"?><root>
  <list>
    <item>
       <name>Name</name>
       <description>Description</description>
    </item>
  </list>
</root>r   ))r'   r[   r   r   r'   r$   z‡<?xml version="1.0"?><root>
  <list>
    <item>
       <name>1</name>
       <description>2</description>
    </item>
  </list>
</root>)r'  r   ru  r€  r   r)   Ústrr   )r	   r   r  r  r®   r*   r   r   r   Útest_write_simple_xmlK  s   


z!WriterTests.test_write_simple_xmlc                 C   ó(   |   t¡}|  |¡}d}|  ||¡ d S )Nú™<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><body>Hello!</body></html>©r'  r/  rz  r€  ©r	   r   r  r  r   r   r   Útest_write_simple_xhtmlf  s   

z#WriterTests.test_write_simple_xhtmlc                 C   r…  )NzŒ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <body>Hello!</body>
</html>)r'  r/  rx  r‚  rˆ  r   r   r   Útest_write_simple_xhtml_as_htmll  s   

z+WriterTests.test_write_simple_xhtml_as_htmlc                 C   r…  )Na  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>This will be escaped in html output: &amp;</title>
    <script>this won't be escaped in html output: &</script>
    <script type="text/javascript">
            //
              // this won't be escaped in html output
              function match(a,b) {
                 if (a < b && a > 0) then { return 1 }
                }
             //
    </script>
    <style>this won't be escaped in html output: &</style>
  </head>
  <!-- a comment -->
  <body>
    <div></div>
    <div>
      <form action="." method="POST">
      <img src="foo.gif">
      <table border="0">
        <tbody>
          <tr class="foo">
            <td>Name</td>
            <td>Description</td>
          </tr>
        </tbody>
      </table>
      <input name="submit" type="submit" value=" Next ">
      </form>
    </div>
  </body>
</html>)r'  r‚   rx  r‚  rˆ  r   r   r   Ú test_write_complex_xhtml_as_htmlu  s   

$z,WriterTests.test_write_complex_xhtml_as_htmlc                 C   r…  )NaV  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
    <title>This will be escaped in html output: &amp;</title>
    <script>this won't be escaped in html output: &amp;</script>
    <script type="text/javascript">
            //
              // this won't be escaped in html output
              function match(a,b) {
                 if (a &lt; b &amp;&amp; a > 0) then { return 1 }
                }
             //
    </script>
    <style>this won't be escaped in html output: &amp;</style>
  </head>
  <!--  a comment  -->
  <body>
    <div ns0:baz="slab" xmlns:ns0="http://foo/bar" />
    <div>
      <form action="." method="POST">
      <img src="foo.gif" />
      <table border="0">
        <tbody>
          <tr class="foo">
            <td>Name</td>
            <td>Description</td>
          </tr>
        </tbody>
      </table>
      <input name="submit" type="submit" value=" Next " />
      </form>
    </div>
  </body>
</html>)r'  r‚   rz  r€  rˆ  r   r   r   Ú!test_write_complex_xhtml_as_xhtmlž  s   

#z-WriterTests.test_write_complex_xhtml_as_xhtmlc                 C   s<   ddl m} |  t¡}|  |¡}d}|  ||dd|¡ d S )Nr   r…   zä<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <body>
    <area><base><basefont><br><col><frame><hr><img><input><isindex>
    <link><meta><param>
  </body>
</html>r‡   rˆ   )rŠ   r†   r'  Ú_EMPTYTAGS_HTMLrx  r   )r	   r†   r   r  r  r   r   r   Útest_write_emptytags_htmlÍ  s
   

z%WriterTests.test_write_emptytags_htmlc                 C   r…  )NaŽ  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <body>
  <tag selected></tag>
  <tag checked></tag>
  <tag compact></tag>
  <tag declare></tag>
  <tag defer></tag>
  <tag disabled></tag>
  <tag ismap></tag>
  <tag multiple></tag>
  <tag nohref></tag>
  <tag noresize></tag>
  <tag noshade></tag>
  <tag nowrap></tag>
  </body>
</html>)r'  Ú_BOOLEANATTRS_XHTMLrx  r‚  rˆ  r   r   r   Ú%test_write_booleanattrs_xhtml_as_htmlÚ  s   

z1WriterTests.test_write_booleanattrs_xhtml_as_htmlc                 C   ó,   |   t¡}| j|dd}d}|  ||¡ d S )NT©ÚpipelinezÜ<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><body ns0:id="body" xmlns:ns0="https://github.com/Supervisor/supervisor">Hello!</body></html>r‡  rˆ  r   r   r   Ú test_write_simple_xhtml_pipelineð  ó   
z,WriterTests.test_write_simple_xhtml_pipelinec                 C   r‘  )NTr’  a  <?xml version="1.0"?><root>
  <list ns0:id="list" xmlns:ns0="https://github.com/Supervisor/supervisor">
    <item ns0:id="item">
       <name ns0:id="name">Name</name>
       <description ns0:id="description">Description</description>
    </item>
  </list>
</root>©r'  r   ru  r€  rˆ  r   r   r   Útest_write_simple_xml_pipelineö  ó   
z*WriterTests.test_write_simple_xml_pipelinec                 C   r‘  )Núlatin-1rˆ   z§<?xml version="1.0" encoding="latin-1"?><root>
  <list>
    <item>
       <name>Name</name>
       <description>Description</description>
    </item>
  </list>
</root>r–  rˆ  r   r   r   Ú'test_write_simple_xml_override_encoding  r˜  z3WriterTests.test_write_simple_xml_override_encodingc                 C   r‘  )NT©Úfragmentú<root>
  <list>
    <item>
       <name>Name</name>
       <description>Description</description>
    </item>
  </list>
</root>r–  rˆ  r   r   r   Ú!test_write_simple_xml_as_fragment  r˜  z-WriterTests.test_write_simple_xml_as_fragmentc                 C   ó:   |   t¡}ddlm} | j||jd}d}|  ||¡ d S )Nr   ©Údoctypea  <?xml version="1.0"?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><root>
  <list>
    <item>
       <name>Name</name>
       <description>Description</description>
    </item>
  </list>
</root>©r'  r   r   r¡  ru  Úxhtmlr€  ©r	   r   r¡  r  r  r   r   r   Ú"test_write_simple_xml_with_doctype  s
   
	z.WriterTests.test_write_simple_xml_with_doctypec                 C   ó<   |   t¡}ddlm} | j|d|jd}d}|  ||¡ d S )Nr   r   F©Údeclarationr¡  zø<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><root>
  <list>
    <item>
       <name>Name</name>
       <description>Description</description>
    </item>
  </list>
</root>r¢  r¤  r   r   r   Ú+test_write_simple_xml_doctype_nodeclaration-  s   
ÿz7WriterTests.test_write_simple_xml_doctype_nodeclarationc                 C   ó>   |   t¡}ddlm} | j|d|jdd}d}|  ||¡ d S )Nr   r   T©r¨  r¡  rœ  r  r¢  r¤  r   r   r   Ú<test_write_simple_xml_fragment_kills_doctype_and_declaration<  s   
ÿzHWriterTests.test_write_simple_xml_fragment_kills_doctype_and_declarationc                 C   s.   |   t¡}| j|ddd}d}|  ||¡ d S )Nr™  T)r‰   r¨  zÁ<?xml version="1.0" encoding="latin-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><body>Hello!</body></html>r‡  rˆ  r   r   r   Ú)test_write_simple_xhtml_override_encodingK  s   
z5WriterTests.test_write_simple_xhtml_override_encodingc                 C   r‘  ©NTr›  ú <html><body>Hello!</body></html>r‡  rˆ  r   r   r   Ú#test_write_simple_xhtml_as_fragmentQ  r•  z/WriterTests.test_write_simple_xhtml_as_fragmentc                 C   rŸ  )Nr   r   r†  ©r'  r/  r   r¡  rz  r£  r€  r¤  r   r   r   Ú$test_write_simple_xhtml_with_doctypeW  s
   
z0WriterTests.test_write_simple_xhtml_with_doctypec                 C   r¦  )Nr   r   Fr§  r†  r±  r¤  r   r   r   Ú-test_write_simple_xhtml_doctype_nodeclaration^  s   
ÿz9WriterTests.test_write_simple_xhtml_doctype_nodeclarationc                 C   rª  )Nr   r   Tr«  r¯  r±  r¤  r   r   r   Ú>test_write_simple_xhtml_fragment_kills_doctype_and_declarationf  s   
ÿzJWriterTests.test_write_simple_xhtml_fragment_kills_doctype_and_declarationc                 C   r‘  r®  ©r'  r/  rx  r€  rˆ  r   r   r   Ú(test_write_simple_xhtml_as_html_fragmentn  r•  z4WriterTests.test_write_simple_xhtml_as_html_fragmentc                 C   r…  )Nzˆ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><body>Hello!</body></html>rµ  rˆ  r   r   r   Ú,test_write_simple_xhtml_with_doctype_as_htmlt  s   

z8WriterTests.test_write_simple_xhtml_with_doctype_as_htmlc                 C   rŸ  )Nr   r   z|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><body>Hello!</body></html>)r'  r/  r   r¡  rx  Úhtml_strictr€  r¤  r   r   r   Ú+test_write_simple_xhtml_as_html_new_doctype|  s
   
z7WriterTests.test_write_simple_xhtml_as_html_new_doctypec                 C   s&   ddl m} |  |jtf| jd¡ d S )Nr   )Úexpatz.<html><head></head><body>&fleeb;</body></html>)Úxml.parsersrº  r   ÚerrorÚSyntaxErrorr'  )r	   rº  r   r   r   Útest_unknown_entity…  s   ÿzWriterTests.test_unknown_entityc                 C   ó@   |   t¡}| d¡}|jddd |  |¡}d}|  ||¡ d S )Nr$   údescription &<foo>&amp;<bar>Fr±   zØ<?xml version="1.0"?>
        <root>
        <list>
        <item>
        <name>Name</name>
          <description>description &amp;&lt;foo>&amp;&lt;bar></description>
        </item>
        </list>
        </root>©r'  r   r   rt   ru  r€  ©r	   r   rp   r  r  r   r   r   Útest_content_nostructure‹  ó   


	z$WriterTests.test_content_nostructurec                 C   r¿  )Nr$   údescription &<foo> <bar>Tr±   zÊ<?xml version="1.0"?>
        <root>
        <list>
        <item>
        <name>Name</name>
          <description>description &<foo> <bar></description>
        </item>
        </list>
        </root>rÁ  rÂ  r   r   r   Útest_content_structure›  rÄ  z"WriterTests.test_content_structurec                 C   r¿  )Nr$   rÀ  Fr±   z½<?xml version="1.0"?>
        <root>
        <list>
        <item>
        <name>Name</name>
          description &amp;&lt;foo>&amp;&lt;bar>
        </item>
        </list>
        </root>©r'  r   r   rh   ru  r€  rÂ  r   r   r   Útest_replace_nostructure«  rÄ  z$WriterTests.test_replace_nostructurec                 C   r¿  )Nr$   rÅ  Tr±   z¯<?xml version="1.0"?>
        <root>
        <list>
        <item>
        <name>Name</name>
          description &<foo> <bar>
        </item>
        </list>
        </root>rÇ  rÂ  r   r   r   Útest_replace_structure»  rÄ  z"WriterTests.test_replace_structurec                 C   s8   ddl m} ddlm} d}|  |ddd||ƒ¡ d S )Nr   rõ   ©Ú_escape_cdataúO< > &lt;&amp; &&apos; && &foo "" http://www.example.com?foo=bar&bang=baz &#123;zf&lt; > &lt;&amp; &amp;&apos; &amp;&amp; &amp;foo "" http://www.example.com?foo=bar&amp;bang=baz &#123;r‡   rˆ   )rŠ   rö   r   rË  r   )r	   rö   rË  r3   r   r   r   Útest_escape_cdataË  s   þüzWriterTests.test_escape_cdatac                 C   óV   ddl m} ddlm} ddlm} ||ddddd}|  |ddd||d	ƒ¡ d S )
Nr   rÊ  rõ   r…   õ   Â€r‡   rˆ   ú&#128;Úascii)r   rË  rŠ   rö   r†   r   )r	   rË  rö   r†   r3   r   r   r   Útest_escape_cdata_unicodeerrorÖ  ó   ÿz*WriterTests.test_escape_cdata_unicodeerrorc                 C   s:   ddl m} ddlm} d}|  |ddd||d ƒ¡ d S )Nr   ©Ú_escape_attribrõ   rÌ  zp&lt; > &lt;&amp; &amp;&apos; &amp;&amp; &amp;foo &quot;&quot; http://www.example.com?foo=bar&amp;bang=baz &#123;r‡   rˆ   )r   rÕ  rŠ   rö   r   )r	   rÕ  rö   r3   r   r   r   Útest_escape_attribÞ  s   ýûzWriterTests.test_escape_attribc                 C   rÎ  )
Nr   rÔ  rõ   r…   rÏ  r‡   rˆ   rÐ  rÑ  )r   rÕ  rŠ   rö   r†   r   )r	   rÕ  rö   r†   r3   r   r   r   Útest_escape_attrib_unicodeerrorê  rÓ  z+WriterTests.test_escape_attrib_unicodeerrorN)*r   r‘   r’   r'  r)  rp  ru  rx  rz  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Ã  rÆ  rÈ  rÉ  rÍ  rÒ  rÖ  r×  r   r   r   r   rf     sP    	)/	rf  c                 C   s    t  dd| ¡} t  dd| ¡} | S )Nz[ \t]+ú z/>ú>©ÚreÚsub©Úsr   r   r   Únormalize_htmlò  s   rß  c                 C   s.   t  dd| ¡} t  dd| ¡} t  dd| ¡} | S )Nz\s+rØ  z(?s)\s+<ú<z(?s)>\s+rÙ  rÚ  rÝ  r   r   r   r~  ÷  s   r~  c                   C   s   t  tjt ¡S r–   )ÚunittestÚfindTestCasesÚsysÚmodulesr   r   r   r   r   Ú
test_suiteý  ó   rå  c                   C   s   t jdd d S )Nrå  )ÚdefaultTest)rá  Úmainr   r   r   r   rè     ræ  rè  Ú__main__)rá  rÛ  rã  r   r/  r  r  Ú_ENTITIES_XHTMLr‚   rH  r\   ÚTestCaser   r“   r$  rT  rf  rß  r~  rå  rè  r   r   r   r   r   Ú<module>   sB   
	&' 0 I    S /$   U
ÿ