§
    Étºf†q  ã                   ó  — d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3  ee4d¬¦  «        Z5 G d„ de¦  «        Z6 G d„ de¦  «        Z7 G d„ de¦  «        Z8 G d„ d¦  «        Z9 G d„ d ee9¦  «        Z: G d!„ d"ee9¦  «        Z; G d#„ d$ee9¦  «        Z< G d%„ d&ee9¦  «        Z= G d'„ d(e1¦  «        Z> G d)„ d*e1¦  «        Z? G d+„ d,e'¦  «        Z@ G d-„ d.e'¦  «        ZA G d/„ d0e'¦  «        ZB G d1„ d2¦  «        ZC ee"¦  «         G d3„ d4e3¦  «        ¦   «         ZD G d5„ d6e¦  «        ZEdS )7z#
Tests for L{twisted.web.template}
é    N)ÚStringIO)ÚListÚOptional)Úimplementer)ÚverifyObject)ÚDeferredÚsucceed)ÚEventLoggingObserver)ÚglobalLogPublisher)ÚFailure)ÚFilePath)ÚTestCase)Úsuppress)ÚUnexposedMethodError)ÚFlattenerErrorÚMissingRenderMethodÚMissingTemplateLoader)ÚIRequestÚITemplateLoader)ÚNOT_DONE_YET)	ÚElementÚFlattenableÚTagÚ	TagLoaderÚXMLFileÚ	XMLStringÚrenderElementÚrendererÚtags)ÚFlattenTestCase)ÚDummyRequestúhPassing filenames or file objects to XMLFile is deprecated since Twisted 12.1.  Pass a FilePath instead.)ÚcategoryÚmessagec                   ó:   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„Zd	d„ZdS )
ÚTagFactoryTestszO
    Tests for L{_TagFactory} through the publicly-exposed L{tags} object.
    ÚreturnNc                 óT   — t           j        }|                      |j        d¦  «         dS )z=
        HTML tags can be retrieved through C{tags}.
        ÚaN)r   r)   ÚassertEqualÚtagName©ÚselfÚtags     ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/test/test_template.pyÚtest_lookupTagzTagFactoryTests.test_lookupTag4   s)   € õ ŒfˆØ×Ò˜œ cÑ*Ô*Ð*Ð*Ð*ó    c                 óT   — t           j        }|                      |j        d¦  «         dS )zj
        Twisted supports the latest and greatest HTML tags from the HTML5
        specification.
        ÚvideoN)r   r3   r*   r+   r,   s     r/   Útest_lookupHTML5Tagz#TagFactoryTests.test_lookupHTML5Tag;   s)   € õ
 ŒjˆØ×Ò˜œ gÑ.Ô.Ð.Ð.Ð.r1   c                 óT   — t           j        }|                      |j        d¦  «         dS )zÏ
        To support transparent inclusion in templates, there is a special tag,
        the transparent tag, which has no name of its own but is accessed
        through the "transparent" attribute.
        Ú N)r   Útransparentr*   r+   r,   s     r/   Útest_lookupTransparentTagz)TagFactoryTests.test_lookupTransparentTagC   s*   € õ ÔˆØ×Ò˜œ bÑ)Ô)Ð)Ð)Ð)r1   c                 óT   — |                       t          t          t          d¦  «         dS )zv
        Invalid tags which are not part of HTML cause AttributeErrors when
        accessed through C{tags}.
        ÚinvalidN©ÚassertRaisesÚAttributeErrorÚgetattrr   ©r-   s    r/   Útest_lookupInvalidTagz%TagFactoryTests.test_lookupInvalidTagL   s$   € ð
 	×Ò�.­'µ4¸ÑCÔCÐCÐCÐCr1   c                 óT   — |                       t          t          t          d¦  «         dS )z‘
        As a special case, the <xmp> tag is simply not available through
        C{tags} or any other part of the templating machinery.
        ÚxmpNr;   r?   s    r/   Útest_lookupXMPzTagFactoryTests.test_lookupXMPS   s$   € ð
 	×Ò�.­'µ4¸Ñ?Ô?Ð?Ð?Ð?r1   ©r'   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r4   r8   r@   rC   © r1   r/   r&   r&   /   sŒ   € € € € € ðð ð+ð +ð +ð +ð/ð /ð /ð /ð*ð *ð *ð *ðDð Dð Dð Dð@ð @ð @ð @ð @ð @r1   r&   c                   óR   — e Zd 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 )ÚElementTestsz5
    Tests for the awesome new L{Element} class.
    r'   Nc                 óš   — t          ¦   «         }|                      t          |j        d¦  «        }|                      |j        |¦  «         dS )zr
        L{Element.render} raises L{MissingTemplateLoader} if the C{loader}
        attribute is L{None}.
        N)r   r<   r   ÚrenderÚassertIdenticalÚelement©r-   rO   Úerrs      r/   Útest_missingTemplateLoaderz'ElementTests.test_missingTemplateLoader`   sE   € õ
 ‘)”)ˆØ×ÒÕ 5°w´~ÀtÑLÔLˆØ×Ò˜Sœ[¨'Ñ2Ô2Ð2Ð2Ð2r1   c           	      óœ   —  G d„ dt           ¦  «        }|                      dt          t           |¦   «         ¦  «        ¦  «        ¦  «         dS )zT
        A L{MissingTemplateLoader} instance can be repr()'d without error.
        c                   ó   — e Zd Zdefd„ZdS )úFElementTests.test_missingTemplateLoaderRepr.<locals>.PrettyReprElementr'   c                 ó   — dS ©NúPretty Repr ElementrI   r?   s    r/   Ú__repr__zOElementTests.test_missingTemplateLoaderRepr.<locals>.PrettyReprElement.__repr__o   ó   € Ø,Ð,r1   N©rE   rF   rG   ÚstrrY   rI   r1   r/   ÚPrettyReprElementrU   n   ó/   € € € € € ð- #ð -ð -ð -ð -ð -ð -r1   r]   rX   N)r   ÚassertInÚreprr   )r-   r]   s     r/   Útest_missingTemplateLoaderReprz+ElementTests.test_missingTemplateLoaderRepri   sn   € ð
	-ð 	-ð 	-ð 	-ð 	-¥ñ 	-ô 	-ð 	-ð 	�ŠØ!¥4Õ(=Ð>OÐ>OÑ>QÔ>QÑ(RÔ(RÑ#SÔ#Sñ	
ô 	
ð 	
ð 	
ð 	
r1   c                 óÐ   — t          ¦   «         }|                      t          |j        d¦  «        }|                      |j        |¦  «         |                      |j        d¦  «         dS )zž
        When called with the name which is not associated with a render method,
        L{Element.lookupRenderMethod} raises L{MissingRenderMethod}.
        ÚfooN)r   r<   r   ÚlookupRenderMethodrN   rO   r*   Ú
renderNamerP   s      r/   Útest_missingRendererMethodz'ElementTests.test_missingRendererMethodv   s_   € õ
 ‘)”)ˆØ×ÒÕ 3°WÔ5OÐQVÑWÔWˆØ×Ò˜Sœ[¨'Ñ2Ô2Ð2Ø×Ò˜œ¨Ñ/Ô/Ð/Ð/Ð/r1   c                 óÎ   —  G d„ dt           ¦  «        }t          t           |¦   «         d¦  «        ¦  «        }|                      d|¦  «         |                      d|¦  «         dS )zR
        A L{MissingRenderMethod} instance can be repr()'d without error.
        c                   ó   — e Zd Zdefd„ZdS )úDElementTests.test_missingRenderMethodRepr.<locals>.PrettyReprElementr'   c                 ó   — dS rW   rI   r?   s    r/   rY   zMElementTests.test_missingRenderMethodRepr.<locals>.PrettyReprElement.__repr__†   rZ   r1   Nr[   rI   r1   r/   r]   ri   …   r^   r1   r]   ÚexpectedMethodrX   N)r   r`   r   r_   )r-   r]   Úss      r/   Útest_missingRenderMethodReprz)ElementTests.test_missingRenderMethodRepr€   s�   € ð
	-ð 	-ð 	-ð 	-ð 	-¥ñ 	-ô 	-ð 	-õ Õ$Ð%6Ð%6Ñ%8Ô%8Ð:JÑKÔKÑLÔLˆØ�ŠÐ+¨QÑ/Ô/Ð/Ø�ŠÐ&¨Ñ*Ô*Ð*Ð*Ð*r1   c                 óº   —  G d„ dt           ¦  «        } |¦   «                              d¦  «        }|                       |dt          j        ¦  «        d¦  «         dS )z‰
        When called with the name of a defined render method,
        L{Element.lookupRenderMethod} returns that render method.
        c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úBElementTests.test_definedRenderer.<locals>.ElementWithRenderMethodÚrequestr.   r'   c                 ó   — dS )NÚbarrI   ©r-   rq   r.   s      r/   rc   zFElementTests.test_definedRenderer.<locals>.ElementWithRenderMethod.foo”   s   € à�ur1   N)	rE   rF   rG   r   r   r   r   r   rc   rI   r1   r/   ÚElementWithRenderMethodrp   “   sL   € € € € € Øð 8¨HÔ#5ð ¸Cð ÀKð ð ð ñ ŒXðð ð r1   ru   rc   Nrs   )r   rd   r*   r   Úbr)r-   ru   rc   s      r/   Útest_definedRendererz!ElementTests.test_definedRenderer�   st   € ð	ð 	ð 	ð 	ð 	¥gñ 	ô 	ð 	ð
 &Ð%Ñ'Ô'×:Ò:¸5ÑAÔAˆØ×Ò˜˜˜T¥4¤7Ñ+Ô+¨UÑ3Ô3Ð3Ð3Ð3r1   c                 óè   ‡— t          t          ¦  «         G d„ d¦  «        ¦   «         Š G ˆfd„dt          ¦  «        } |¦   «         }|                      |                     d¦  «        dg¦  «         dS )zi
        L{Element.render} loads a document from the C{loader} attribute and
        returns it.
        c                   ó&   — e Zd Zdee         fd„ZdS )ú0ElementTests.test_render.<locals>.TemplateLoaderr'   c                 ó   — dgS )NÚresultrI   r?   s    r/   Úloadz5ElementTests.test_render.<locals>.TemplateLoader.load£   s
   € Ø �zÐ!r1   N)rE   rF   rG   r   r   r}   rI   r1   r/   ÚTemplateLoaderrz   ¡   s4   € € € € € ð"˜d ;Ô/ð "ð "ð "ð "ð "ð "r1   r~   c                   ó$   •— e Zd Z ” ¦   «         ZdS )ú-ElementTests.test_render.<locals>.StubElementN)rE   rF   rG   Úloader)r~   s   €r/   ÚStubElementr€   ¦   s   ø€ € € € € Ø#�^Ñ%Ô%ˆFˆFˆFr1   r‚   Nr|   )r   r   r   r*   rM   )r-   r‚   rO   r~   s      @r/   Útest_renderzElementTests.test_render›   s«   ø€ õ 
•_Ñ	%Ô	%ð	"ð 	"ð 	"ð 	"ð 	"ñ 	"ô 	"ñ 
&Ô	%ð	"ð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&�'ñ 	&ô 	&ð 	&ð �+‘-”-ˆØ×Ò˜Ÿš¨Ñ-Ô-°¨zÑ:Ô:Ð:Ð:Ð:r1   c                 óö   — |                       t          t          ¦  «        }t          j        dk    r%|                      t          |¦  «        d¦  «         dS |                      t          |¦  «        d¦  «         dS )z‚
        If the L{renderer} decorator  is called without any arguments, it will
        raise a comprehensible exception.
        )é   é
   z=Expose.__call__() missing 1 required positional argument: 'f'z6__call__() missing 1 required positional argument: 'f'N)r<   Ú	TypeErrorr   ÚsysÚversion_infor*   r\   )r-   Útes     r/   Útest_misuseRendererz ElementTests.test_misuseRenderer¬   s…   € ð
 ×Ò�y­(Ñ3Ô3ˆÝÔ˜wÒ&Ð&Ø×ÒÝ�B‘”ÐXñô ð ð ð ð ×ÒÝ�B‘”ÐQñô ð ð ð r1   c                 óT   — |                       t          t          j        dd¦  «         dS )zŒ
        Called directly, without a default, L{renderer.get} raises
        L{UnexposedMethodError} when it cannot find a renderer.
        NÚnotARenderer)r<   r   r   Úgetr?   s    r/   Útest_renderGetDirectlyErrorz(ElementTests.test_renderGetDirectlyError»   s'   € ð
 	×ÒÕ.µ´¸dÀNÑSÔSÐSÐSÐSr1   rD   )rE   rF   rG   rH   rR   ra   rf   rm   rw   rƒ   r‹   r�   rI   r1   r/   rK   rK   [   sÄ   € € € € € ðð ð3ð 3ð 3ð 3ð
ð 
ð 
ð 
ð0ð 0ð 0ð 0ð+ð +ð +ð +ð4ð 4ð 4ð 4ð;ð ;ð ;ð ;ð"ð ð ð ðTð Tð Tð Tð Tð Tr1   rK   c                   óJ   — e Zd ZdZdd„Zdd„Zege_        dd„Zege_        dS )ÚXMLFileReprTestszB
    Tests for L{twisted.web.template.XMLFile}'s C{__repr__}.
    r'   Nc                 óŒ   — t          d¦  «        }|                      d|›d�t          t          |¦  «        ¦  «        ¦  «         dS )zK
        An L{XMLFile} with a L{FilePath} returns a useful repr().
        ú/tmp/fake.xmlú<XMLFile of ú>N)r   r*   r`   r   )r-   Úpaths     r/   Útest_filePathzXMLFileReprTests.test_filePathÈ   sG   € õ ˜Ñ(Ô(ˆØ×ÒÐ1¨Ð1Ð1Ð1µ4½À¹¼Ñ3FÔ3FÑGÔGÐGÐGÐGr1   c                 ór   — d}|                       d|›d�t          t          |¦  «        ¦  «        ¦  «         dS )zH
        An L{XMLFile} with a filename returns a useful repr().
        r“   r”   r•   N)r*   r`   r   )r-   Úfnames     r/   Útest_filenamezXMLFileReprTests.test_filenameÏ   s?   € ð  ˆØ×ÒÐ2¨Ð2Ð2Ð2µD½À¹¼Ñ4HÔ4HÑIÔIÐIÐIÐIr1   c                 óŒ   — t          d¦  «        }|                      d|›d�t          t          |¦  «        ¦  «        ¦  «         dS )zK
        An L{XMLFile} with a file object returns a useful repr().
        znot xmlr”   r•   N)r   r*   r`   r   )r-   Úfobjs     r/   Ú	test_filezXMLFileReprTests.test_fileØ   sG   € õ ˜	Ñ"Ô"ˆØ×ÒÐ1¨Ð1Ð1Ð1µ4½À¹¼Ñ3FÔ3FÑGÔGÐGÐGÐGr1   rD   )	rE   rF   rG   rH   r—   rš   Ú_xmlFileSuppressr   r�   rI   r1   r/   r‘   r‘   Ã   s|   € € € € € ðð ðHð Hð Hð HðJð Jð Jð Jð /Ð/€MÔðHð Hð Hð Hð +Ð+€IÔÐÐr1   r‘   c                   óN   — e Zd ZU eed<   	 dZ	 defd„Zdd„Zdd„Z	e
ge	_        dS )	ÚXMLLoaderTestsMixinÚdeprecatedUseú<p>Hello, world.</p>r'   c                 ó   — t           ‚©N)ÚNotImplementedErrorr?   s    r/   ÚloaderFactoryz!XMLLoaderTestsMixin.loaderFactoryî   s   € Ý!Ð!r1   Nc                 óŠ  — t          | t          ¦  «        sJ ‚|                      ¦   «         }|                     ¦   «         \  }t          |t          ¦  «        sJ ‚|                      | j        g¬¦  «        }| j        rm|                      t          |¦  «        d¦  «         |                      |d         d         t          ¦  «         |                      |d         d         d¦  «         n#|                      t          |¦  «        d¦  «         |                      |j
        d¦  «         |                      |j        dg¦  «         d	S )
zQ
        Verify that the loader returns a tag with the correct children.
        )ÚoffendingFunctionsé   r   r#   r$   r"   ÚpúHello, world.N)Ú
isinstancer   r¦   r}   r   ÚflushWarningsr¡   r*   ÚlenÚDeprecationWarningr+   Úchildren)r-   r�   r.   Úwarningss       r/   Ú	test_loadzXMLLoaderTestsMixin.test_loadñ   s9  € õ ˜$¥Ñ)Ô)Ð)Ð)Ð)Ø×#Ò#Ñ%Ô%ˆØ—’‘”‰ˆÝ˜#�sÑ#Ô#Ð#Ð#Ð#à×%Ò%¸$Ô:LÐ9MÐ%ÑNÔNˆØÔð 		/Ø×Ò�S ™]œ]¨AÑ.Ô.Ð.Ø×Ò˜X aœ[¨Ô4Õ6HÑIÔIÐIØ×ÒØ˜”˜IÔ&ðKñô ð ð ð ×Ò�S ™]œ]¨AÑ.Ô.Ð.à×Ò˜œ cÑ*Ô*Ð*Ø×Ò˜œ¨Ð'8Ñ9Ô9Ð9Ð9Ð9r1   c                 óØ   — t          | t          ¦  «        sJ ‚|                      ¦   «         }|                     ¦   «         }|                     ¦   «         }|                      ||¦  «         dS )zd
        If {load()} can be called on a loader twice the result should be the
        same.
        N)r¬   r   r¦   r}   r*   )r-   r�   Útags1Útags2s       r/   Útest_loadTwicez"XMLLoaderTestsMixin.test_loadTwice	  sa   € õ
 ˜$¥Ñ)Ô)Ð)Ð)Ð)Ø×#Ò#Ñ%Ô%ˆØ—’‘”ˆØ—’‘”ˆØ×Ò˜ Ñ&Ô&Ð&Ð&Ð&r1   rD   )rE   rF   rG   ÚboolÚ__annotations__ÚtemplateStringr   r¦   r²   r¶   rž   r   rI   r1   r/   r    r    â   s   € € € € € € ØÐÐÑðð
 ,€Nðð"˜ð "ð "ð "ð "ð:ð :ð :ð :ð0	'ð 	'ð 	'ð 	'ð  0Ð0€NÔÐÐr1   r    c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚXMLStringLoaderTestsz5
    Tests for L{twisted.web.template.XMLString}
    Fr'   c                 ó*   — t          | j        ¦  «        S )zS
        @return: an L{XMLString} constructed with C{self.templateString}.
        )r   r¹   r?   s    r/   r¦   z"XMLStringLoaderTests.loaderFactory  s   € õ ˜Ô,Ñ-Ô-Ð-r1   N©rE   rF   rG   rH   r¡   r   r¦   rI   r1   r/   r»   r»     s@   € € € € € ðð ð €Mð.˜ð .ð .ð .ð .ð .ð .r1   r»   c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚXMLFileWithFilePathTestszJ
    Tests for L{twisted.web.template.XMLFile}'s L{FilePath} support.
    Fr'   c                 ó¼   — t          |                      ¦   «         ¦  «        }|                     | j                             d¦  «        ¦  «         t          |¦  «        S )zŽ
        @return: an L{XMLString} constructed with a L{FilePath} pointing to a
            file that contains C{self.templateString}.
        Úutf8)r   ÚmktempÚ
setContentr¹   Úencoder   ©r-   Úfps     r/   r¦   z&XMLFileWithFilePathTests.loaderFactory,  sH   € õ
 �d—k’k‘m”mÑ$Ô$ˆØ
�Š�dÔ)×0Ò0°Ñ8Ô8Ñ9Ô9Ð9Ý�r‰{Œ{Ðr1   Nr½   rI   r1   r/   r¿   r¿   %  s@   € € € € € ðð ð €Mð˜ð ð ð ð ð ð r1   r¿   c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚXMLFileWithFileTestszU
    Tests for L{twisted.web.template.XMLFile}'s deprecated file object support.
    Tr'   c                 óD   — t          t          | j        ¦  «        ¦  «        S )z{
        @return: an L{XMLString} constructed with a file object that contains
            C{self.templateString}.
        )r   r   r¹   r?   s    r/   r¦   z"XMLFileWithFileTests.loaderFactory=  s   € õ
 •x Ô 3Ñ4Ô4Ñ5Ô5Ð5r1   Nr½   rI   r1   r/   rÈ   rÈ   6  s@   € € € € € ðð ð €Mð6˜ð 6ð 6ð 6ð 6ð 6ð 6r1   rÈ   c                   ó"   — e Zd ZdZdZdefd„ZdS )ÚXMLFileWithFilenameTestszR
    Tests for L{twisted.web.template.XMLFile}'s deprecated filename support.
    Tr'   c                 óÆ   — t          |                      ¦   «         ¦  «        }|                     | j                             d¦  «        ¦  «         t          |j        ¦  «        S )z‹
        @return: an L{XMLString} constructed with a filename that points to a
            file containing C{self.templateString}.
        rÁ   )r   rÂ   rÃ   r¹   rÄ   r   r–   rÅ   s     r/   r¦   z&XMLFileWithFilenameTests.loaderFactoryL  sL   € õ
 �d—k’k‘m”mÑ$Ô$ˆØ
�Š�dÔ)×0Ò0°Ñ8Ô8Ñ9Ô9Ð9Ý�r”wÑÔÐr1   Nr½   rI   r1   r/   rË   rË   E  s@   € € € € € ðð ð €Mð ˜ð  ð  ð  ð  ð  ð  r1   rË   c                   ó¢   — e Zd 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S )ÚFlattenIntegrationTestsz[
    Tests for integration between L{Element} and
    L{twisted.web._flatten.flatten}.
    r'   Nc                 óz   — g d¢}|D ]3}|                       t          t          |¦  «        ¬¦  «        |¦  «         Œ4dS )z¾
        Given a series of parsable XML strings, verify that
        L{twisted.web._flatten.flatten} will flatten the L{Element} back to the
        input when sent on a round trip.
        )ó   <p>Hello, world.</p>s   <p><!-- hello, world --></p>s    <p><![CDATA[Hello, world.]]></p>sB   <test1 xmlns:test2="urn:test2"><test2:test3></test2:test3></test1>s0   <test1 xmlns="urn:test2"><test3></test3></test1>ó
   <p>â˜ƒ</p>©r�   N)ÚassertFlattensImmediatelyr   r   )r-   Ú	fragmentsÚxmls      r/   Útest_roundTripz&FlattenIntegrationTests.test_roundTrip\  s\   € ð
ð 
ð 
ˆ	ð ð 	Pð 	PˆCØ×*Ò*­7½)ÀC¹.¼.Ð+IÑ+IÔ+IÈ3ÑOÔOÐOÐOð	Pð 	Pr1   c                 ól   — t          t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )zx
        When flattening an HTML entity, it should flatten out to the utf-8
        representation if possible.
        z<p>&#9731;</p>rÒ   rÑ   N©r   r   rÓ   ©r-   rO   s     r/   Útest_entityConversionz-FlattenIntegrationTests.test_entityConversionm  s:   € õ
 ¥Ð+;Ñ!<Ô!<Ð=Ñ=Ô=ˆØ×&Ò& wÐ0FÑGÔGÐGÐGÐGr1   c                 óT   — |                       t          ¦   «         t          ¦  «         dS )zk
        Rendering an Element without a loader attribute raises the appropriate
        exception.
        N)ÚassertFlatteningRaisesr   r   r?   s    r/   rR   z2FlattenIntegrationTests.test_missingTemplateLoaderu  s%   € ð
 	×#Ò#¥G¡I¤IÕ/DÑEÔEÐEÐEÐEr1   c                 óv   — t          t          d¦  «        ¬¦  «        }|                      |t          ¦  «         dS )zÒ
        Flattening an L{Element} with a C{loader} which has a tag with a render
        directive fails with L{FlattenerError} if there is no available render
        method to satisfy that directive.
        zy
        <p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"
          t:render="unknownMethod" />
        rÒ   N)r   r   rÜ   r   rÙ   s     r/   Útest_missingRenderMethodz0FlattenIntegrationTests.test_missingRenderMethod|  sI   € õ Ýðñô ð
ñ 
ô 
ˆð 	×#Ò# GÕ-@ÑAÔAÐAÐAÐAr1   c                 ól   — t          t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )zw
        A C{transparent} element should be eliminated from the DOM and rendered as
        only its children.
        zk<t:transparent xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">Hello, world.</t:transparent>rÒ   ó   Hello, world.NrØ   rÙ   s     r/   Útest_transparentRenderingz1FlattenIntegrationTests.test_transparentRenderingŒ  sI   € õ
 Ýð#ñô ð
ñ 
ô 
ˆð 	×&Ò& wÐ0@ÑAÔAÐAÐAÐAr1   c                 ól   — t          t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )z~
        An Element with an attr tag renders the vaule of its attr tag as an
        attribute of its containing tag.
        z‚<a xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"><t:attr name="href">http://example.com</t:attr>Hello, world.</a>rÒ   s.   <a href="http://example.com">Hello, world.</a>NrØ   rÙ   s     r/   Útest_attrRenderingz*FlattenIntegrationTests.test_attrRendering›  sT   € õ
 Ýðñô ð
ñ 
ô 
ˆð 	×&Ò&ØÐFñ	
ô 	
ð 	
ð 	
ð 	
r1   c                 ó`   — |                       d„ t          d¦  «        D ¦   «         d¦  «         dS )z–
        When rendering a large number of already-fired Deferreds we should not
        encounter any recursion errors or stack-depth issues.
        c                 ó,   — g | ]}t          d ¦  «        ‘ŒS )Úx©r	   )Ú.0Úis     r/   ú
<listcomp>zMFlattenIntegrationTests.test_synchronousDeferredRecursion.<locals>.<listcomp>±  s   € Ð'IÐ'IÐ'I¸­°©¬Ð'IÐ'IÐ'Ir1   éú   sú   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxN)rÓ   Úranger?   s    r/   Ú!test_synchronousDeferredRecursionz9FlattenIntegrationTests.test_synchronousDeferredRecursion¬  s5   € ð
 	×&Ò&Ð'IÐ'I½eÀC¹j¼jÐ'IÑ'IÔ'IÈ:ÑVÔVÐVÐVÐVr1   c                 óH   — |                       t          t          d¦  «         dS )z{
        A template with a toplevel C{attr} tag will not load; it will raise
        L{AssertionError} if you try.
        z˜<t:attr
            xmlns:t='http://twistedmatrix.com/ns/twisted.web.template/0.1'
            name='something'
            >hello</t:attr>
            N©r<   ÚAssertionErrorr   r?   s    r/   Útest_errorToplevelAttrz.FlattenIntegrationTests.test_errorToplevelAttr³  s1   € ð
 	×ÒÝÝðñ	
ô 	
ð 	
ð 	
ð 	
r1   c                 óH   — |                       t          t          d¦  «         dS )z�
        A template with an C{attr} tag with no C{name} attribute will not load;
        it will raise L{AssertionError} if you try.
        z{<html><t:attr
            xmlns:t='http://twistedmatrix.com/ns/twisted.web.template/0.1'
            >hello</t:attr></html>Nrï   r?   s    r/   Útest_errorUnnamedAttrz-FlattenIntegrationTests.test_errorUnnamedAttrÂ  s1   € ð
 	×ÒÝÝð&ñ	
ô 	
ð 	
ð 	
ð 	
r1   c                 ó–   — d}t          t          |¦  «        ¬¦  «        }|                      ||                     d¦  «        ¦  «         dS )zˆ
        If the parser sees a prefix it doesn't recognize on an attribute, it
        will pass it on through to serialization.
        z}<hello:world hello:sample="testing" xmlns:hello="http://made-up.example.com/ns/not-real">This is a made-up tag.</hello:world>rÒ   rÁ   N)r   r   ÚassertFlattensTorÄ   )r-   ÚtheInputrO   s      r/   Útest_lenientPrefixBehaviorz2FlattenIntegrationTests.test_lenientPrefixBehaviorÏ  sN   € ð3ð 	õ
 ¥¨8Ñ!4Ô!4Ð5Ñ5Ô5ˆØ×Ò˜g x§¢°vÑ'>Ô'>Ñ?Ô?Ð?Ð?Ð?r1   c                 óŠ   —  G d„ dt           ¦  «        } |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )zi
        An Element with a render method which returns a Deferred will render
        correctly.
        c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úHFlattenIntegrationTests.test_deferredRendering.<locals>.RenderfulElementrq   r.   r'   c                 ó    — t          d¦  «        S ©Nr«   rç   rt   s      r/   ÚrenderMethodzUFlattenIntegrationTests.test_deferredRendering.<locals>.RenderfulElement.renderMethodã  s   € õ ˜Ñ/Ô/Ð/r1   N©	rE   rF   rG   r   r   r   r   r   rý   rI   r1   r/   ÚRenderfulElementrú   â  sO   € € € € € Øð0Ø'¨Ô1ð0Ø8;ð0àð0ð 0ð 0ñ ŒXð0ð 0ð 0r1   rÿ   úŸ
        <p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"
          t:render="renderMethod">
            Goodbye, world.
        </p>
        rÒ   rà   NrØ   ©r-   rÿ   rO   s      r/   Útest_deferredRenderingz.FlattenIntegrationTests.test_deferredRenderingÜ  sv   € ð	0ð 	0ð 	0ð 	0ð 	0�wñ 	0ô 	0ð 	0ð #Ð"Ýðñô ð	
ñ 	
ô 	
ˆð 	×&Ò& wÐ0@ÑAÔAÐAÐAÐAr1   c                 óh   —  G d„ dt           ¦  «        }|                       |¦   «         d¦  «         dS )z£
        If there is a non-None loader attribute on the class of an Element
        instance but none on the instance itself, the class attribute is used.
        c                   ó$   — e Zd Z ed¦  «        ZdS )úEFlattenIntegrationTests.test_loaderClassAttribute.<locals>.SubElementr¢   N)rE   rF   rG   r   r�   rI   r1   r/   Ú
SubElementr  û  s   € € € € € Ø�YÐ5Ñ6Ô6ˆFˆFˆFr1   r  rÐ   N)r   rÓ   )r-   r  s     r/   Útest_loaderClassAttributez1FlattenIntegrationTests.test_loaderClassAttributeõ  sQ   € ð	7ð 	7ð 	7ð 	7ð 	7�ñ 	7ô 	7ð 	7ð 	×&Ò& z z¡|¤|Ð5LÑMÔMÐMÐMÐMr1   c                 ó”   ‡— g Š G ˆfd„dt           ¦  «        } |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )z�
        An Element with a valid render directive has that directive invoked and
        the result added to the output.
        c                   óD   •— e Zd Zedee         dedefˆ fd„¦   «         ZdS )úIFlattenIntegrationTests.test_directiveRendering.<locals>.RenderfulElementrq   r.   r'   c                 óH   •— ‰                      | |f¦  «          |d¦  «        S rü   )Úappend)r-   rq   r.   Úrenderss      €r/   rý   zVFlattenIntegrationTests.test_directiveRendering.<locals>.RenderfulElement.renderMethod  s+   ø€ ð —’  g˜Ñ/Ô/Ð/Ø�s˜?Ñ+Ô+Ð+r1   Nrþ   )r  s   €r/   rÿ   r
    sZ   ø€ € € € € Øð,Ø'¨Ô1ð,Ø8;ð,àð,ð ,ð ,ð ,ð ,ñ ŒXð,ð ,ð ,r1   rÿ   úx
        <p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"
          t:render="renderMethod" />
        rÒ   rÐ   NrØ   )r-   rÿ   rO   r  s      @r/   Útest_directiveRenderingz/FlattenIntegrationTests.test_directiveRendering   sˆ   ø€ ð
 ˆð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,�wñ 	,ô 	,ð 	,ð #Ð"Ýðñô ð
ñ 
ô 
ˆð 	×&Ò& wÐ0GÑHÔHÐHÐHÐHr1   c                 óŠ   —  G d„ dt           ¦  «        } |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )z‡
        An Element with a render method which omits the containing tag
        successfully removes that tag from the output.
        c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úTFlattenIntegrationTests.test_directiveRenderingOmittingTag.<locals>.RenderfulElementrq   r.   r'   c                 ó   — dS rü   rI   rt   s      r/   rý   zaFlattenIntegrationTests.test_directiveRenderingOmittingTag.<locals>.RenderfulElement.renderMethod   s	   € ð '�r1   Nrþ   rI   r1   r/   rÿ   r    sO   € € € € € Øð'Ø'¨Ô1ð'Ø8;ð'àð'ð 'ð 'ñ ŒXð'ð 'ð 'r1   rÿ   r   rÒ   rà   NrØ   r  s      r/   Ú"test_directiveRenderingOmittingTagz:FlattenIntegrationTests.test_directiveRenderingOmittingTag  sv   € ð	'ð 	'ð 	'ð 	'ð 	'�wñ 	'ô 	'ð 	'ð #Ð"Ýðñô ð	
ñ 	
ô 	
ˆð 	×&Ò& wÐ0@ÑAÔAÐAÐAÐAr1   c                 óŠ   —  G d„ dt           ¦  «        } |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )út
        An Element which is returned by the render method of another Element is
        rendered properly.
        c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úUFlattenIntegrationTests.test_elementContainingStaticElement.<locals>.RenderfulElementrq   r.   r'   c                 óN   —  |t          t          d¦  «        ¬¦  «        ¦  «        S )Nz<em>Hello, world.</em>rÒ   )r   r   rt   s      r/   rý   zbFlattenIntegrationTests.test_elementContainingStaticElement.<locals>.RenderfulElement.renderMethod9  s(   € ð �s�7­)Ð4LÑ*MÔ*MÐNÑNÔNÑOÔOÐOr1   Nrþ   rI   r1   r/   rÿ   r  8  sX   € € € € € ØðPØ'¨Ô1ðPØ8;ðPàðPð Pð Pñ ŒXðPð Pð Pr1   rÿ   r  rÒ   s   <p><em>Hello, world.</em></p>NrØ   r  s      r/   Ú#test_elementContainingStaticElementz;FlattenIntegrationTests.test_elementContainingStaticElement2  s~   € ð	Pð 	Pð 	Pð 	Pð 	P�wñ 	Pô 	Pð 	Pð #Ð"Ýðñô ð
ñ 
ô 
ˆð 	×&Ò& wÐ0PÑQÔQÐQÐQÐQr1   c                 óŠ   —  G d„ dt           ¦  «        } |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )r  c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úHFlattenIntegrationTests.test_elementUsingSlots.<locals>.RenderfulElementrq   r.   r'   c                 ó.   — |                      d¬¦  «        S )Nzworld.)Útest2)Ú	fillSlotsrt   s      r/   rý   zUFlattenIntegrationTests.test_elementUsingSlots.<locals>.RenderfulElement.renderMethodP  s   € ð —}’}¨8�}Ñ4Ô4Ð4r1   Nrþ   rI   r1   r/   rÿ   r  O  sO   € € € € € Øð5Ø'¨Ô1ð5Ø8;ð5àð5ð 5ð 5ñ ŒXð5ð 5ð 5r1   rÿ   zž<p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1" t:render="renderMethod"><t:slot name="test1" default="Hello, " /><t:slot name="test2" /></p>rÒ   rÐ   NrØ   r  s      r/   Útest_elementUsingSlotsz.FlattenIntegrationTests.test_elementUsingSlotsI  sv   € ð	5ð 	5ð 	5ð 	5ð 	5�wñ 	5ô 	5ð 	5ð #Ð"Ýðñô ð
ñ 
ô 
ˆð 	×&Ò& wÐ0GÑHÔHÐHÐHÐHr1   c                 ó¶   ‡—  G ˆfd„dt           ¦  «        } G d„ dt           ¦  «        Š |t          d¦  «        ¬¦  «        }|                      |d¦  «         dS )	z¿
        Directives in the document factory of an Element returned from a render
        method of another Element are satisfied from the correct object: the
        "inner" Element.
        c                   óD   •— e Zd Zedee         dedefˆ fd„¦   «         ZdS )úRFlattenIntegrationTests.test_elementContainingDynamicElement.<locals>.OuterElementrq   r.   r'   c                 óH   •—  | ‰t          d¦  «        ¬¦  «        ¦  «        S )Nz©
                <t:ignored
                  xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"
                  t:render="innerMethod" />
                rÒ   )r   )r-   rq   r.   ÚInnerElements      €r/   ÚouterMethodz^FlattenIntegrationTests.test_elementContainingDynamicElement.<locals>.OuterElement.outerMethodi  s=   ø€ à�sØ �LÝ(ðñ ô  ðñ ô ñ
ô 
ð 
r1   N)	rE   rF   rG   r   r   r   r   r   r'  )r&  s   €r/   ÚOuterElementr$  h  sW   ø€ € € € € Øð¨8°HÔ+=ð ÀCð ÈKð ð ð ð ð ñ ŒXðð ð r1   r(  c                   ó>   — e Zd Zedee         dedefd„¦   «         ZdS )úRFlattenIntegrationTests.test_elementContainingDynamicElement.<locals>.InnerElementrq   r.   r'   c                 ó   — dS rü   rI   rt   s      r/   ÚinnerMethodz^FlattenIntegrationTests.test_elementContainingDynamicElement.<locals>.InnerElement.innerMethodx  s   € à&�r1   N)	rE   rF   rG   r   r   r   r   r   r,  rI   r1   r/   r&  r*  w  sL   € € € € € Øð'¨8°HÔ+=ð 'ÀCð 'ÈKð 'ð 'ð 'ñ ŒXð'ð 'ð 'r1   r&  zw
        <p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"
          t:render="outerMethod" />
        rÒ   rÐ   NrØ   )r-   r(  rO   r&  s      @r/   Ú$test_elementContainingDynamicElementz<FlattenIntegrationTests.test_elementContainingDynamicElementa  sª   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	�7ñ 	ô 	ð 	ð	'ð 	'ð 	'ð 	'ð 	'�7ñ 	'ô 	'ð 	'ð
 �,Ýðñô ð
ñ 
ô 
ˆð 	×&Ò& wÐ0GÑHÔHÐHÐHÐHr1   c                 ó   ‡‡— t          d¦  «        Š G ˆˆfd„dt          ¦  «        Š ‰¦   «         } ‰¦   «         }|                      |d¦  «         |                      |d¦  «         |                      |d¦  «         dS )z
        Rendering the output of a loader, or even the same element, should
        return different output each time.
        zœ<p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1"><t:transparent t:render="classCounter" /> <t:transparent t:render="instanceCounter" /></p>c                   ó€   •— e Zd ZdZdZ”Zedee         de	de
fˆ fd„¦   «         Zedee         de	de
fd„¦   «         ZdS )úHFlattenIntegrationTests.test_sameLoaderTwice.<locals>.DestructiveElementr   rq   r.   r'   c                 ó^   •— ‰xj         dz  c_          |t          ‰j         ¦  «        ¦  «        S ©Nr©   )Úcountr\   )r-   rq   r.   ÚDestructiveElements      €r/   ÚclassCounterzUFlattenIntegrationTests.test_sameLoaderTwice.<locals>.DestructiveElement.classCounter—  s5   ø€ ð #Ð(Ô(¨AÑ-Ð(Ô(Ø�s�3Ð1Ô7Ñ8Ô8Ñ9Ô9Ð9r1   c                 ó\   — | xj         dz  c_          |t          | j         ¦  «        ¦  «        S r2  )ÚinstanceCountr\   rt   s      r/   ÚinstanceCounterzXFlattenIntegrationTests.test_sameLoaderTwice.<locals>.DestructiveElement.instanceCounterž  s3   € ð Ð"Ô" aÑ'Ð"Ô"Ø�s�3˜tÔ1Ñ2Ô2Ñ3Ô3Ð3r1   N)rE   rF   rG   r3  r7  r�   r   r   r   r   r   r5  r8  )r4  ÚsharedLoaders   €€r/   r4  r0  ’  s¦   ø€ € € € € ØˆEØˆMØ!ˆFàð:Ø'¨Ô1ð:Ø8;ð:àð:ð :ð :ð :ð :ñ ŒXð:ð ð4Ø'¨Ô1ð4Ø8;ð4àð4ð 4ð 4ñ ŒXð4ð 4ð 4r1   r4  s
   <p>1 1</p>s
   <p>2 2</p>s
   <p>3 1</p>N)r   r   rÓ   )r-   Úe1Úe2r4  r9  s      @@r/   Útest_sameLoaderTwicez,FlattenIntegrationTests.test_sameLoaderTwice†  s¹   øø€ õ
 !ðñ
ô 
ˆð	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4¥ñ 	4ô 	4ð 	4ð&  ÐÑ!Ô!ˆØÐÑ!Ô!ˆØ×&Ò& r¨=Ñ9Ô9Ð9Ø×&Ò& r¨=Ñ9Ô9Ð9Ø×&Ò& r¨=Ñ9Ô9Ð9Ð9Ð9r1   rD   )rE   rF   rG   rH   rÖ   rÚ   rR   rÞ   rá   rã   rí   rñ   ró   r÷   r  r  r  r  r  r!  r-  r<  rI   r1   r/   rÎ   rÎ   V  s¿  € € € € € ðð ð
Pð Pð Pð Pð"Hð Hð Hð HðFð Fð Fð FðBð Bð Bð Bð Bð Bð Bð Bð
ð 
ð 
ð 
ð"Wð Wð Wð Wð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð@ð @ð @ð @ðBð Bð Bð Bð2	Nð 	Nð 	Nð 	NðIð Ið Ið Ið2Bð Bð Bð Bð2Rð Rð Rð Rð.Ið Ið Ið Ið0#Ið #Ið #Ið #IðJ#:ð #:ð #:ð #:ð #:ð #:r1   rÎ   c                   ó2   — e Zd ZdZdd„Zdd„Zdd„Zdd„ZdS )	ÚTagLoaderTestsz!
    Tests for L{TagLoader}.
    r'   Nc                 óR   — t          t          j        d¦  «        ¦  «        | _        d S )NÚtest)r   r   ré   r�   r?   s    r/   ÚsetUpzTagLoaderTests.setUp±  s   € Ý¥¤ v¡¤Ñ/Ô/ˆŒˆˆr1   c                 ó`   — |                       t          t          | j        ¦  «        ¦  «         dS )zJ
        An instance of L{TagLoader} provides L{ITemplateLoader}.
        N)Ú
assertTruer   r   r�   r?   s    r/   Útest_interfacezTagLoaderTests.test_interface´  s(   € ð 	�Š�¥_°d´kÑBÔBÑCÔCÐCÐCÐCr1   c                 ój   — |                       | j                             ¦   «         t          ¦  «         dS )zK
        L{TagLoader.load} returns a list, per L{ITemplateLoader}.
        N)ÚassertIsInstancer�   r}   Úlistr?   s    r/   Útest_loadsListzTagLoaderTests.test_loadsListº  s.   € ð 	×Ò˜dœk×.Ò.Ñ0Ô0µ$Ñ7Ô7Ð7Ð7Ð7r1   c                 óZ   — t          | j        ¦  «        }|                      |d¦  «         dS )zŽ
        L{TagLoader} can be used in an L{Element}, and flattens as the tag used
        to construct the L{TagLoader} would flatten.
        s   <i>test</i>N)r   r�   rÓ   )r-   Úes     r/   Útest_flattenzTagLoaderTests.test_flattenÀ  s/   € õ
 �D”KÑ Ô ˆØ×&Ò& q¨.Ñ9Ô9Ð9Ð9Ð9r1   rD   )rE   rF   rG   rH   rA  rD  rH  rK  rI   r1   r/   r>  r>  ¬  sr   € € € € € ðð ð0ð 0ð 0ð 0ðDð Dð Dð Dð8ð 8ð 8ð 8ð:ð :ð :ð :ð :ð :r1   r>  c                   ó(   — e Zd ZdZ ed¦  «        ZdS )ÚTestElementz:
    An L{Element} that can be rendered successfully.
    zS<p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">Hello, world.</p>N)rE   rF   rG   rH   r   r�   rI   r1   r/   rM  rM  É  s0   € € € € € ðð ð ˆYð	ñô €F€F€Fr1   rM  c                   ó>   — e Zd ZdZ ed¦  «        Zddededdfd„ZdS )	ÚTestFailureElementzˆ
    An L{Element} that can be used in place of L{FailureElement} to verify
    that L{renderElement} can render failures properly.
    zO<p xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">I failed.</p>NÚfailurer�   r'   c                 ó   — || _         d S r¤   )rP  )r-   rP  r�   s      r/   Ú__init__zTestFailureElement.__init__á  s   € ØˆŒˆˆr1   r¤   )	rE   rF   rG   rH   r   r�   r   ÚobjectrR  rI   r1   r/   rO  rO  Õ  sd   € € € € € ðð ð
 ˆYð	ñô €Fðð  ð °ð À4ð ð ð ð ð ð r1   rO  c                   ó.   — e Zd ZdZdee         ddfd„ZdS )ÚFailingElementz<
    An element that raises an exception when rendered.
    rq   r'   r   c                 ó   — d}d}||z  › S )Né*   r   rI   )r-   rq   r)   Úbs       r/   rM   zFailingElement.renderê  s   € ØˆØˆØ�q‘&ˆ{Ðr1   N)rE   rF   rG   rH   r   r   rM   rI   r1   r/   rU  rU  å  sE   € € € € € ðð ð˜h xÔ0ð °]ð ð ð ð ð ð r1   rU  c                   ó   — e Zd ZdZdZdS )ÚFakeSitezL
    A minimal L{Site} object that we can use to test displayTracebacks
    FN)rE   rF   rG   rH   ÚdisplayTracebacksrI   r1   r/   rZ  rZ  ð  s"   € € € € € ðð ð ÐÐÐr1   rZ  c                   ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚDummyRenderRequestz¢
    A dummy request object that has a C{site} attribute.

    This does not implement the full IRequest interface, but enough of it
    for this test suite.
    r'   Nc                 ór   •— t          ¦   «                              dg¦  «         t          ¦   «         | _        d S )Nr1   )ÚsuperrR  rZ  Úsite)r-   Ú	__class__s    €r/   rR  zDummyRenderRequest.__init__  s,   ø€ Ý‰Œ×Ò˜#˜ÑÔÐÝ‘J”JˆŒ	ˆ	ˆ	r1   rD   )rE   rF   rG   rH   rR  Ú__classcell__)ra  s   @r/   r]  r]  ø  sG   ø€ € € € € ðð ðð ð ð ð ð ð ð ð ð r1   r]  c                   ó’   — e Zd ZdZd
d„Zded         fd„Zded         fd„Zded         fd„Zded         fd„Z	ded         fd	„Z
dS )ÚRenderElementTestsz
    Test L{renderElement}
    r'   Nc                 ó,   — t          ¦   «         | _        dS )z8
        Set up a common L{DummyRenderRequest}.
        N)r]  rq   r?   s    r/   rA  zRenderElementTests.setUp  s   € õ *Ñ+Ô+ˆŒˆˆr1   c                 óú   ‡ — t          ¦   «         }‰ j                             ¦   «         }dt          ddfˆ fd„}|                     |¦  «         ‰                      t          t          ‰ j        |¦  «        ¦  «         |S )z¢
        L{renderElement} returns NOT_DONE_YET and eventually
        writes the rendered L{Element} to the request before finishing the
        request.
        Ú_r'   Nc                 ó¬   •— ‰                      d                     ‰j        j        ¦  «        d¦  «         ‰                     ‰j        j        ¦  «         d S )Nr1   s$   <!DOCTYPE html>
<p>Hello, world.</p>)r*   Újoinrq   ÚwrittenrC  Úfinished©rg  r-   s    €r/   Úcheckz3RenderElementTests.test_simpleRender.<locals>.check  sQ   ø€ Ø×ÒØ—’˜œÔ-Ñ.Ô.Ø<ñô ð ð �OŠO˜DœLÔ1Ñ2Ô2Ð2Ð2Ð2r1   )rM  rq   ÚnotifyFinishrS  ÚaddCallbackrN   r   r   ©r-   rO   Údrm  s   `   r/   Útest_simpleRenderz$RenderElementTests.test_simpleRender  sˆ   ø€ õ ‘-”-ˆàŒL×%Ò%Ñ'Ô'ˆð	3•Vð 	3 ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	
�Š�eÑÔÐà×Ò�\­=¸¼ÀwÑ+OÔ+OÑPÔPÐPàˆr1   c                 óú   ‡ — t          ¦   «         }‰ j                             ¦   «         }dt          ddfˆ fd„}|                     |¦  «         ‰                      t          t          ‰ j        |¦  «        ¦  «         |S )z
        L{renderElement} handles failures by writing a minimal
        error message to the request and finishing it.
        rg  r'   Nc                 ó&  •— ‰                      t          ¦  «        }‰                     t          |¦  «        d¦  «         ‰                     d                     ‰j        j        ¦  «        d¦  «         ‰                     ‰j        j        ¦  «         d S )Nr©   r1   s‚   <!DOCTYPE html>
<div style="font-size:800%;background-color:#FFF;color:#F00">An error occurred while rendering the response.</div>)	ÚflushLoggedErrorsr   r*   r®   ri  rq   rj  rC  rk  )rg  Úflushedr-   s     €r/   rm  z4RenderElementTests.test_simpleFailure.<locals>.check1  sƒ   ø€ Ø×,Ò,­^Ñ<Ô<ˆGØ×Ò�S ™\œ\¨1Ñ-Ô-Ð-Ø×ÒØ—’˜œÔ-Ñ.Ô.ðOñ	ô 	ð 	ð �OŠO˜DœLÔ1Ñ2Ô2Ð2Ð2Ð2r1   )rU  rq   rn  rS  ro  rN   r   r   rp  s   `   r/   Útest_simpleFailurez%RenderElementTests.test_simpleFailure(  sŠ   ø€ õ
 !Ñ"Ô"ˆàŒL×%Ò%Ñ'Ô'ˆð	3•Vð 	3 ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	
�Š�eÑÔÐà×Ò�\­=¸¼ÀwÑ+OÔ+OÑPÔPÐPàˆr1   c                 ó0  ‡ ‡— t          j        ‰ t          ¦  «        Šd‰ j        j        _        t          ¦   «         }‰ j                             ¦   «         }dt          ddfˆˆ fd„}| 	                    |¦  «         t          ‰ j        |t          ¬¦  «         |S )z˜
        L{renderElement} will render a traceback when rendering of
        the element fails and our site is configured to display tracebacks.
        Trg  r'   Nc                 óÈ  •— ‰                      dt          ‰¦  «        ¦  «         ‰d         d         }‰                     |j        t          ¦  «         ‰                     t          ¦  «        }‰                     t          |¦  «        d¦  «         ‰                     d                     ‰j        j	        ¦  «        d¦  «         ‰ 
                    ‰j        j        ¦  «         d S )Nr©   r   Úlog_failurer1   s    <!DOCTYPE html>
<p>I failed.</p>)ÚassertEqualsr®   rF  Úvaluer   ru  r*   ri  rq   rj  rC  rk  )rg  Úfrv  ÚlogObserverr-   s      €€r/   rm  zARenderElementTests.test_simpleFailureWithTraceback.<locals>.checkR  sÄ   ø€ Ø×Ò˜a¥ [Ñ!1Ô!1Ñ2Ô2Ð2Ø˜A”˜}Ô-ˆAØ×!Ò! !¤'­>Ñ:Ô:Ð:Ø×,Ò,­^Ñ<Ô<ˆGØ×Ò�S ™\œ\¨1Ñ-Ô-Ð-Ø×ÒØ—’˜œÔ-Ñ.Ô.Ð0Tñô ð ð �OŠO˜DœLÔ1Ñ2Ô2Ð2Ð2Ð2r1   )Ú_failElement)r
   ÚcreateWithCleanupr   rq   r`  r[  rU  rn  rS  ro  r   rO  )r-   rO   rq  rm  r~  s   `   @r/   Útest_simpleFailureWithTracebackz2RenderElementTests.test_simpleFailureWithTracebackF  s¦   øø€ õ
 +Ô<¸TÕCUÑVÔVˆØ.2ˆŒÔÔ+å Ñ"Ô"ˆàŒL×%Ò%Ñ'Ô'ˆð		3•Vð 		3 ð 		3ð 		3ð 		3ð 		3ð 		3ð 		3ð 		3ð 	
�Š�eÑÔÐå�d”l GÕ:LÐMÑMÔMÐMàˆr1   c                 óÌ   ‡ — t          ¦   «         }‰ j                             ¦   «         }dt          ddfˆ fd„}|                     |¦  «         t          ‰ j        |d¬¦  «         |S )zs
        L{renderElement} will write the doctype string specified by the
        doctype keyword argument.
        rg  r'   Nc                 ón   •— ‰                      d                     ‰j        j        ¦  «        d¦  «         d S )Nr1   s‚   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<p>Hello, world.</p>©r*   ri  rq   rj  rl  s    €r/   rm  z8RenderElementTests.test_nonDefaultDoctype.<locals>.checkl  s>   ø€ Ø×ÒØ—’˜œÔ-Ñ.Ô.ð,ñô ð ð ð r1   sm   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">©Údoctype©rM  rq   rn  rS  ro  r   rp  s   `   r/   Útest_nonDefaultDoctypez)RenderElementTests.test_nonDefaultDoctypec  s�   ø€ õ
 ‘-”-ˆàŒL×%Ò%Ñ'Ô'ˆð	•Vð 	 ð 	ð 	ð 	ð 	ð 	ð 	ð 	
�Š�eÑÔÐåØŒLØðIð		
ñ 	
ô 	
ð 	
ð ˆr1   c                 óÌ   ‡ — t          ¦   «         }‰ j                             ¦   «         }dt          ddfˆ fd„}|                     |¦  «         t          ‰ j        |d¬¦  «         |S )zs
        L{renderElement} will not write out a doctype if the doctype keyword
        argument is L{None}.
        rg  r'   Nc                 ón   •— ‰                      d                     ‰j        j        ¦  «        d¦  «         d S )Nr1   rÐ   r„  rl  s    €r/   rm  z2RenderElementTests.test_noneDoctype.<locals>.checkŒ  s1   ø€ Ø×Ò˜SŸXšX d¤lÔ&:Ñ;Ô;Ð=TÑUÔUÐUÐUÐUr1   r…  r‡  rp  s   `   r/   Útest_noneDoctypez#RenderElementTests.test_noneDoctypeƒ  s…   ø€ õ
 ‘-”-ˆàŒL×%Ò%Ñ'Ô'ˆð	V•Vð 	V ð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	
�Š�eÑÔÐå�d”l G°TÐ:Ñ:Ô:Ð:àˆr1   rD   )rE   rF   rG   rH   rA  r   rr  rw  r�  rˆ  r‹  rI   r1   r/   rd  rd    sÎ   € € € € € ðð ð,ð ,ð ,ð ,ð 8¨D¤>ð ð ð ð ð. H¨T¤Nð ð ð ð ð<°¸$´ð ð ð ð ð:¨°¬ð ð ð ð ð@ (¨4¤.ð ð ð ð ð ð r1   rd  )FrH   rˆ   Úior   Útypingr   r   Úzope.interfacer   Úzope.interface.verifyr   Útwisted.internet.deferr   r	   Útwisted.internet.testingr
   Útwisted.loggerr   Útwisted.python.failurer   Útwisted.python.filepathr   Útwisted.trial.unittestr   Útwisted.trial.utilr   ÚSUPPRESSÚtwisted.web._elementr   Útwisted.web.errorr   r   r   Útwisted.web.iwebr   r   Útwisted.web.serverr   Útwisted.web.templater   r   r   r   r   r   r   r   r   Útwisted.web.test._utilr    Útwisted.web.test.test_webr!   r¯   rž   r&   rK   r‘   r    r»   r¿   rÈ   rË   rÎ   r>  rM  rO  rU  rZ  r]  rd  rI   r1   r/   ú<module>rŸ     sð  ððð ð €
€
€
Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !à &Ð &Ð &Ð &Ð &Ð &Ø .Ð .Ð .Ð .Ð .Ð .à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -Ø *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø +Ð +Ð +Ð +Ð +Ð +ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2à�8Øð?ðñ ô Ð ð)@ð )@ð )@ð )@ð )@�hñ )@ô )@ð )@ðXeTð eTð eTð eTð eT�8ñ eTô eTð eTðP,ð ,ð ,ð ,ð ,�xñ ,ô ,ð ,ð>21ð 21ð 21ð 21ð 21ñ 21ô 21ð 21ðj.ð .ð .ð .ð .˜8Ð%8ñ .ô .ð .ðð ð ð ð ˜xÐ)<ñ ô ð ð"6ð 6ð 6ð 6ð 6˜8Ð%8ñ 6ô 6ð 6ð ð  ð  ð  ð  ˜xÐ)<ñ  ô  ð  ð"S:ð S:ð S:ð S:ð S:˜oñ S:ô S:ð S:ðl
:ð :ð :ð :ð :�_ñ :ô :ð :ð:	ð 	ð 	ð 	ð 	�'ñ 	ô 	ð 	ðð ð ð ð ˜ñ ô ð ð ð ð ð ð �Wñ ô ð ðð ð ð ð ñ ô ð ð €ˆXÑÔð
ð 
ð 
ð 
ð 
˜ñ 
ô 
ñ Ôð
ðMð Mð Mð Mð M˜ñ Mô Mð Mð Mð Mr1   