o
    k¨Êh¾ô  ã                   @   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="http://www.plope.com/software/meld3">
  <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="http://www.plope.com/software/meld3">
   <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>a5  <!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="http://www.plope.com/software/meld3"
      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 ©Né   ©Úparse_xmlstring©Ú r   )ÚselfÚstringr   © r   úB/var/www/html/env/lib/python3.10/site-packages/meld3/test_meld3.pyÚ_makeElement2  ó   zMeldAPITests._makeElementc                 C   r   ©Nr   ©Úparse_htmlstring©r	   r   )r
   r   r   r   r   r   Ú_makeElementFromHTML6  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_defaultA  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   r   Úrepeatr   )r
   r   r   ÚdataÚelementÚdr   r   r   Útest_repeat_nochildI  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_childU  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_modc  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_fillmeldsk  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chrism@plope.comÚsuffixzSr.Úover18Tzmailok:inputgroupÚtruezfavorite_color:inputgroupÚGreenÚFredr	   Ú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_fillmeldhtmlformr  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	   re   r   r   r   Úreplacer   r   ÚlenÚgetchildren)r
   re   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   rd   r%   rf   r   r.   r   rZ   r   F)r	   re   r   r   r   rg   r   rh   ri   r   r   Ú	structure)r
   re   r   ÚDrj   Ú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 rm   )r	   re   r   r   r   Úcontentr   rh   ri   r   r   rn   )r
   re   r   ro   rj   rp   rq   Ú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	   rw   r   Ú_COMPLEX_XHTMLr   Ú
attributesr   r^   )r
   rw   r   ro   r   r   r   Útest_attributesß  s   


ýzMeldAPITests.test_attributesc                 C   sl   ddl m} ddlm} |  t¡}| d¡}|j|dƒ|dƒd� |  |j	d|dƒd	d
d|dƒ|di¡ d S )Nr   rv   ©Ú_urx   r0   r{   )r    r~   r    r   r€   r~   )
r	   rw   Ú_compatr…   r   r�   r   r‚   r   r^   )r
   rw   r…   r   ro   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   rc   rl   rr   ru   rƒ   r‡   r‹   r   r   r   r   r   1  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   rv   r   Úrecordr   r%   r"   r#   r$   r&   r'   rZ   r   )	r–   r	   rw   Úappendr)   r   r   r   rh   )r
   r   rw   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   Frd   ©r–   rs   r   rh   Ú	_childrenÚparentr   rn   r	   re   r   ©r
   ÚelÚreplacenodere   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©rn   r   r   rd   r¦   r©   r   r   r   Útest_content_simple_structure3  s   
z7MeldElementInterfaceTests.test_content_simple_structurec                 C   s2   ddl m} |  d|di¡}|  | d¡|¡ d S )Nr   rv   r¢   r¤   )r	   rw   r–   r   r   )r
   rw   rª   r   r   r   Útest_findmeld_simple>  s   z.MeldElementInterfaceTests.test_findmeld_simplec                 C   sL   ddl m} |  d|di¡}|  d|di¡}| |¡ |  | d¡|¡ d S )Nr   rv   r¢   r¤   ÚspanÚthespan©r	   rw   r–   r˜   r   r   )r
   rw   rª   r°   r   r   r   Ú!test_findmeld_simple_oneleveldownC  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   rv   r¢   r¤   r°   r±   r3   Úthear²   )r
   rw   rª   r°   r3   r   r   r   Ú"test_findmeld_simple_twolevelsdownJ  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_ctorS  s   z#MeldElementInterfaceTests.test_ctorc                 C   s<   |   dddi¡}| ¡ }|  t|ƒd¡ |  |d |¡ d S )Nr¢   r£   r¤   r   r   )r–   Úgetiteratorr   rh   )r
   r¢   Úiteratorr   r   r   Útest_getiterator_simpleY  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°   rz   Úspan3Ú3Úabcú  é   r   r   rZ   é   ©r–   r   Útailr˜   r¸   r   rh   ©r
   r¢   r°   Úspan2r»   Úitr   r   r   Útest_getiterator_  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°   rz   r»   r¼   r½   r¾   )r   r¿   r   r   rZ   rÀ   rÁ   rÃ   r   r   r   Útest_getiterator_tag_ignoredq  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°   rz   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°   rz   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°   Údiv2r   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°   rz   r»   r¼   r½   r¾   r   )
r–   r   rÂ   r˜   r\   r   r   r^   ÚassertNotEqualr£   )r
   r¢   r°   rÄ   r»   rÍ   r   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   rZ   )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   rZ   r   )r–   r   r¨   rh   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¨   rh   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   rv   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   )rj   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	   rw   r–   r˜   r   Úlineage)r
   rw   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i¡}|  dddi¡}|  dddi¡}|  dddi¡}	| |¡ | |¡ | |	¡ | ¡ }
|  |
|dƒ¡ d S )Nr   ©Ú_br¢   r£   rà   r°   rz   r»   r¼   râ   Ú4rã   Ú5rä   Ú6rÍ   zM<div id="div1"><span><span id="2"></span></span><div2 id="div2"></div2></div>)r†   rñ   r–   r˜   Ú	shortreprr   )r
   rñ   r¢   r°   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 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   Útest_shortrepr24  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   rv   r¢   ÚnewdivÚtrÚtitleÚ	unreducedc                    ó   g | ]}|j ˆ  ‘qS r   ©r^   rè   rv   r   r   rë   T  ó    z<MeldElementInterfaceTests.test_diffmeld1.<locals>.<listcomp>Úaddedc                    rý   r   rþ   rè   rv   r   r   rë   U  rÿ   Úremovedc                    rý   r   rþ   rè   rv   r   r   rë   V  rÿ   Úmoved)Útd1Útd2rú   Úreducedc                    rý   r   rþ   rè   rv   r   r   rë   `  rÿ   c                    rý   r   rþ   rè   rv   r   r   rë   a  rÿ   c                    rý   r   rþ   rè   rv   r   r   rë   b  rÿ   )r	   r   rw   r�   r\   r–   r˜   r   rÑ   ÚdiffmeldÚsortr   )r
   r   r   r\   r¢   rú   rû   ÚdiffÚchangesÚ	addedtagsÚremovedtagsÚ	movedtagsr   rv   r   Útest_diffmeld1D  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_diffmeld2j  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ë   1  rì   z<MeldElementInterfaceTests.test_diffmeld5.<locals>.<listcomp>rü   r  )r3   r  r  r,   c                 S   rå   r   ræ   rè   r   r   r   rë   5  rì   r   c                 S   rå   r   ræ   rè   r   r   r   rë   9  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ë   B  rì   c                 S   rå   r   ræ   rè   r   r   r   rë   F  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   Ú_parseM  ó   zParserTests._parsec                 G   r#  r   r   )r
   r$  r   r   r   r   r   Ú_parse_htmlR  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   rv   r   r   r.   r   r   r%   )r	   rw   r%  r   r   r   r¨   r^   )r
   rw   r   Úl1str   r   r%   r   r   r   Útest_parse_simple_xmlW  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   rv   Úhtmlr   Úbody)r	   rw   r%  Ú_SIMPLE_XHTMLr   r   r^   r¨   )r
   Úxhtml_nsrw   r   r,  r   r   r   Útest_parse_simple_xhtmlm  s   
z#ParserTests.test_parse_simple_xhtmlc                 C   st  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 }|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   rv   r+  r   ÚheadÚmetars   útext/html; charset=ISO-8859-1rû   rZ   r,  r¢   z{http://foo/bar}bazÚslabÚcontent_wellÚformrx   r~   Ú.r   r€   ÚimgÚtableÚtable1ÚborderÚ0Útbodyrú   Úclassr    Útdr  r  )r	   rw   r%  r�   r   r   r^   r¨   )r
   r.  rw   r   r0  r1  rû   Úcommentr,  rà   rÍ   r5  r7  r8  r<  rú   r  r  r   r   r   Útest_parse_complex_xhtmlz  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 }	|d }
|d }|  |jd¡ |  |jdddddœ¡ |  |j|¡ |d }|d }|  |jd¡ |d }|d }|d }|  |jd¡ d S )Nr   rv   )ÚCommentr+  r   r0  r1  rs   r2  rû   r,  rZ   rÀ   r8  ztext-align: left; width: 100px;ry   rz   )Ústyler:  ÚcellpaddingÚcellspacingr¿   é   r3   é   é   é   r7  )	r	   rw   rA  r'  Ú	_NVU_HTMLr   r   r^   r¨   )r
   rw   rA  r   r0  r1  rû   r,  r?  Úbr1Úbr2r8  Úbr3ÚhrefÚbr4Úbr5r7  r   r   r   Útest_nvu_htmlÄ  sV   
ÿüzParserTests.test_nvu_htmlc                 C   ó    d}d| }|   t| j|¡ d S ©Nz#http://www.plope.com/software/meld3zF<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   rQ  rR  )r‰   rŠ   r'  rS  r   r   r   Ú"test_dupe_meldids_fails_parse_htmlú  rW  z.ParserTests.test_dupe_meldids_fails_parse_htmlN)rŒ   r�   rŽ   r%  r'  r)  r/  r@  rP  rV  rX  r   r   r   r   r"  L  s    J0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	   r\  r   ©r
   r\  Úorigr  r  r   r   r   Útest_insert_xhtml_doctype  ó
   z#UtilTests.test_insert_xhtml_doctypec                 C   rZ  )Nr   r[  ú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>r]  r^  r   r   r   Ú!test_insert_doctype_after_xmldecl	  ra  z+UtilTests.test_insert_doctype_after_xmldeclc                 C   rZ  )Nr   )Úinsert_meld_ns_declrb  zf<?xml version="1.0" encoding="latin-1"?><root xmlns:meld="http://www.plope.com/software/meld3"></root>)r	   rd  r   )r
   rd  r_  r  r  r   r   r   Útest_insert_meld_ns_decl  ra  z"UtilTests.test_insert_meld_ns_declc                 C   rZ  )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	   rg  r   )r
   rg  r_  r  r  r   r   r   Ú'test_prefeed_preserves_existing_meld_ns  ra  z1UtilTests.test_prefeed_preserves_existing_meld_nsc                 C   s(   ddl m} d}||ƒ}|  ||¡ d S )Nr   rf  z«<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><root xmlns:meld="http://www.plope.com/software/meld3"></root>rh  )r
   rg  r_  r  r   r   r   Ú'test_prefeed_preserves_existing_doctype  s   z1UtilTests.test_prefeed_preserves_existing_doctypeN)rŒ   r�   rŽ   r`  rc  re  ri  rj  r   r   r   r   rY     s    rY  c                   @   sT  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)dOdP„ Z*dQdR„ Z+dSS )TÚWriterTestsc                 C   ó   ddl m} ||ƒ}|S r   r   )r
   Úxmlr   r   r   r   r   r%  %  r&  zWriterTests._parsec                 C   rl  r   r   )r
   rm  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)Úiorn  ro  ÚseekÚread)r
   Úfnr”   rn  Úoutr  r   r   r   Ú_write/  s   
zWriterTests._writec                 K   ó   | j |jfi |¤ŽS r’   )ru  Ú	write_xml©r
   Únoder”   r   r   r   Ú
_write_xml:  ó   zWriterTests._write_xmlc                 K   rv  r’   )ru  Ú
write_htmlrx  r   r   r   Ú_write_html=  r{  zWriterTests._write_htmlc                 K   rv  r’   )ru  Úwrite_xhtmlrx  r   r   r   Ú_write_xhtml@  r{  zWriterTests._write_xhtmlc                 C   ó4   ddl m} t||ƒƒ}t||ƒƒ}|  ||¡ d S ©Nr   r„   ©r†   r…   Únormalize_xmlr   ©r
   r3   r  r…   r   r   r   ÚassertNormalizedXMLEqualC  ó   z$WriterTests.assertNormalizedXMLEqualc                 C   r€  r�  r‚  r„  r   r   r   ÚassertNormalizedHTMLEqualI  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   rZ   r   r   r   r%   z‡<?xml version="1.0"?><root>
  <list>
    <item>
       <name>1</name>
       <description>2</description>
    </item>
  </list>
</root>)r%  r   rz  r…  r   r)   Ústrr   )r
   r   r  r  rª   r*   r   r   r   Útest_write_simple_xmlO  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-  r  r…  ©r
   r   r  r  r   r   r   Útest_write_simple_xhtmlj  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-  r}  r‡  r�  r   r   r   Útest_write_simple_xhtml_as_htmlp  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�   r}  r‡  r�  r   r   r   Ú test_write_complex_xhtml_as_htmly  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�   r  r…  r�  r   r   r   Ú!test_write_complex_xhtml_as_xhtml¢  s   

#z-WriterTests.test_write_complex_xhtml_as_xhtmlc                 C   s8   ddl m} |  t¡}|  |¡}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%  Ú_EMPTYTAGS_HTMLr}  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_XHTMLr}  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="http://www.plope.com/software/meld3">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="http://www.plope.com/software/meld3">
    <item ns0:id="item">
       <name ns0:id="name">Name</name>
       <description ns0:id="description">Description</description>
    </item>
  </list>
</root>©r%  r   rz  r…  r�  r   r   r   Útest_write_simple_xml_pipelineú  ó   
z*WriterTests.test_write_simple_xml_pipelinec                 C   r–  )Núlatin-1)Úencodingz§<?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§  rz  Ú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_nodeclaration1  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_encodingO  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_fragmentU  rš  z/WriterTests.test_write_simple_xhtml_as_fragmentc                 C   r¥  )Nr   r¦  r‹  ©r%  r-  r	   r§  r  r©  r…  rª  r   r   r   Ú$test_write_simple_xhtml_with_doctype[  s
   
z0WriterTests.test_write_simple_xhtml_with_doctypec                 C   r¬  )Nr   r¦  Fr­  r‹  r·  rª  r   r   r   Ú-test_write_simple_xhtml_doctype_nodeclarationb  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_declarationj  s   
ÿzJWriterTests.test_write_simple_xhtml_fragment_kills_doctype_and_declarationc                 C   r–  r´  ©r%  r-  r}  r…  r�  r   r   r   Ú(test_write_simple_xhtml_as_html_fragmentr  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_htmlx  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§  r}  Ú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   |   t¡}|  |¡}d}d S )Nú]<html>
<head></head>
<body>
  <!-- test entity references -->
  <p>&nbsp;</p>
</body>
</html>©r'  Ú_ENTITIES_XHTMLr  r�  r   r   r   Ú$test_write_entities_xhtml_no_doctype‰  s   

z0WriterTests.test_write_entities_xhtml_no_doctypec                 C   s$   d}|   |t ¡}|  |¡}d}d S )Nzy<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">rÀ  rÁ  )r
   Údtr   r  r  r   r   r   Ú&test_write_entities_xhtml_with_doctype–  s   
z2WriterTests.test_write_entities_xhtml_with_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   rs   rz  r…  ©r
   r   ro   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   rg   rz  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   s4   ddl m} ddlm} d}|  |dƒ||ƒ¡ d S )Nr   rð   ©Ú_escape_cdataúM< > &lt;&amp; &&apos; && &foo "" http://www.plope.com?foo=bar&bang=baz &#123;zd&lt; > &lt;&amp; &amp;&apos; &amp;&amp; &amp;foo "" http://www.plope.com?foo=bar&amp;bang=baz &#123;)r†   rñ   r	   r×  r   )r
   rñ   r×  r3   r   r   r   Útest_escape_cdataè  s   ýzWriterTests.test_escape_cdatac                 C   óJ   ddl m} ddlm} ddlm} ||dƒƒ}|  |dƒ||dƒ¡ d S )Nr   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   s6   ddl m} ddlm} d}|  |dƒ||d ƒ¡ d S )Nr   ©Ú_escape_attribrð   rØ  zn&lt; > &lt;&amp; &amp;&apos; &amp;&amp; &amp;foo &quot;&quot; http://www.plope.com?foo=bar&amp;bang=baz &#123;)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…   r3   r   r   r   Útest_escape_attrib_unicodeerror  rß  z+WriterTests.test_escape_attrib_unicodeerrorN),rŒ   r�   rŽ   r%  r'  ru  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ã  r   r   r   r   rk  $  sT    	)/	
rk  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”  rÂ  r�   rI  r[   ÚTestCaser   r�   r"  rY  rk  rë  rƒ  rñ  rô  rŒ   r   r   r   r   Ú<module>   sB    
	&' 0 H    X 5$   j
ÿ