§
    Étºf(  ã                   ó.  — d 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mZmZmZmZ ddlmZ  G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )z$
Tests for L{twisted.web.resource}.
é    )ÚTestCase)ÚUnsupportedMethod)ÚHeaders)ÚIRequest)Ú	FORBIDDENÚ	NOT_FOUNDÚResourceÚ_UnsafeErrorPageÚ_UnsafeForbiddenResourceÚ_UnsafeNoResourceÚgetChildForRequest)ÚDummyRequestc            
       óf   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zded	e	d
e
de
ddf
d„Zdd„Zdd„Zdd„ZdS )ÚErrorPageTestszb
    Tests for L{_UnafeErrorPage}, L{_UnsafeNoResource}, and
    L{_UnsafeForbiddenResource}.
    ÚreturnNc                 óÎ   — t          ddd¦  «        }|                      ¦   «         \  }|                      |d         t          ¦  «         |                      d|d         ¦  «         dS )z§
        The public C{twisted.web.resource.ErrorPage} alias for the
        corresponding C{_Unsafe} class produces a deprecation warning when
        called.
        é{   Úonozono!Úcategoryztwisted.web.pages.errorPageÚmessageN)Ú	ErrorPageÚflushWarningsÚassertEqualÚDeprecationWarningÚassertIn©ÚselfÚ_Úwarnings      ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/test/test_resource.pyÚtest_deprecatedErrorPagez'ErrorPageTests.test_deprecatedErrorPage   sd   € õ �c˜5 &Ñ)Ô)ˆØ×&Ò&Ñ(Ô(‰	ˆØ×Ò˜ Ô,Õ.@ÑAÔAÐAØ�ŠÐ3°W¸YÔ5GÑHÔHÐHÐHÐHó    c                 óÈ   — t          ¦   «         }|                      ¦   «         \  }|                      |d         t          ¦  «         |                      d|d         ¦  «         dS )z¨
        The public C{twisted.web.resource.NoResource} alias for the
        corresponding C{_Unsafe} class produces a deprecation warning when
        called.
        r   ztwisted.web.pages.notFoundr   N)Ú
NoResourcer   r   r   r   r   s      r    Útest_deprecatedNoResourcez(ErrorPageTests.test_deprecatedNoResource)   s\   € õ ‰LŒLˆØ×&Ò&Ñ(Ô(‰	ˆØ×Ò˜ Ô,Õ.@ÑAÔAÐAØ�ŠÐ2°G¸IÔ4FÑGÔGÐGÐGÐGr"   c                 óÈ   — t          ¦   «         }|                      ¦   «         \  }|                      |d         t          ¦  «         |                      d|d         ¦  «         dS )z®
        The public C{twisted.web.resource.ForbiddenResource} alias for the
        corresponding C{_Unsafe} class produce a deprecation warning when
        called.
        r   ztwisted.web.pages.forbiddenr   N)ÚForbiddenResourcer   r   r   r   r   s      r    Ú test_deprecatedForbiddenResourcez/ErrorPageTests.test_deprecatedForbiddenResource4   s^   € õ ÑÔˆØ×&Ò&Ñ(Ô(‰	ˆØ×Ò˜ Ô,Õ.@ÑAÔAÐAØ�ŠÐ3°W¸YÔ5GÑHÔHÐHÐHÐHr"   c                 ó”   — t          ddd¦  «        }|                      |                     dt          ¦   «         ¦  «        |¦  «         dS )zj
        The C{getChild} method of L{ErrorPage} returns the L{ErrorPage} it is
        called on.
        éA  ÚfooÚbars   nameN)r   ÚassertIdenticalÚgetChildÚobject)r   Úpages     r    Útest_getChildzErrorPageTests.test_getChild?   sC   € õ
 ˜˜e UÑ+Ô+ˆØ×Ò˜TŸ]š]¨7µF±H´HÑ=Ô=¸tÑDÔDÐDÐDÐDr"   r0   ÚcodeÚbriefÚdetailc                 ó@  — t          dg¦  «        }d}|||||fz  }|                      |                     |¦  «        |                     d¦  «        ¦  «         |                      |j        |¦  «         |                      |j        t          ddgi¦  «        ¦  «         d S )Nr"   zg
<html>
  <head><title>%s - %s</title></head>
  <body>
    <h1>%s</h1>
    <p>%s</p>
  </body>
</html>
zutf-8s   content-types   text/html; charset=utf-8)r   r   ÚrenderÚencodeÚresponseCodeÚresponseHeadersr   )r   r0   r2   r3   r4   ÚrequestÚtemplateÚexpecteds           r    Ú_pageRenderingTestz!ErrorPageTests._pageRenderingTestG   sµ   € õ  ˜uÑ%Ô%ˆðð 	ð ˜t U¨E°6Ð:Ñ:ˆØ×Ò˜Ÿš WÑ-Ô-¨x¯ª¸wÑ/GÔ/GÑHÔHÐHØ×Ò˜Ô-¨tÑ4Ô4Ð4Ø×ÒØÔ#Ý�_Ð'BÐ&CÐDÑEÔEñ	
ô 	
ð 	
ð 	
ð 	
r"   c                 ód   — d}d}d}t          |||¦  «        }|                      ||||¦  «         dS )a  
        L{ErrorPage.render} returns a C{bytes} describing the error defined by
        the response code and message passed to L{ErrorPage.__init__}.  It also
        uses that response code to set the response code on the L{Request}
        passed in.
        r*   zbrief description textzmuch longer text might go hereN)r   r=   )r   r2   r3   r4   r0   s        r    Útest_errorPageRenderingz&ErrorPageTests.test_errorPageRendering]   sD   € ð ˆØ(ˆØ1ˆÝ˜˜u fÑ-Ô-ˆØ×Ò  d¨E°6Ñ:Ô:Ð:Ð:Ð:r"   c                 ób   — d}t          |¦  «        }|                      |t          d|¦  «         dS )z@
        L{NoResource} sets the HTTP I{NOT FOUND} code.
        zlong messagezNo Such ResourceN)r$   r=   r   ©r   r4   r0   s      r    Útest_noResourceRenderingz'ErrorPageTests.test_noResourceRenderingj   s7   € ð  ˆÝ˜&Ñ!Ô!ˆØ×Ò ¥iÐ1CÀVÑLÔLÐLÐLÐLr"   c                 ób   — d}t          |¦  «        }|                      |t          d|¦  «         dS )zG
        L{ForbiddenResource} sets the HTTP I{FORBIDDEN} code.
        zlonger messagezForbidden ResourceN)r'   r=   r   rA   s      r    Útest_forbiddenResourceRenderingz.ErrorPageTests.test_forbiddenResourceRenderingr   s7   € ð "ˆÝ  Ñ(Ô(ˆØ×Ò ¥iÐ1EÀvÑNÔNÐNÐNÐNr"   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r%   r(   r1   r	   ÚintÚstrr=   r?   rB   rD   © r"   r    r   r      s   € € € € € ðð ð
	Ið 	Ið 	Ið 	Ið	Hð 	Hð 	Hð 	Hð	Ið 	Ið 	Ið 	IðEð Eð Eð Eð
Øð
Ø$'ð
Ø03ð
Ø=@ð
à	ð
ð 
ð 
ð 
ð,;ð ;ð ;ð ;ðMð Mð Mð MðOð Oð Oð Oð Oð Or"   r   c                   ó&   — e Zd ZdZdededdfd„ZdS )ÚDynamicChildzG
    A L{Resource} to be created on the fly by L{DynamicChildren}.
    Úpathr:   r   Nc                 óJ   — t          j        | ¦  «         || _        || _        d S ©N)r	   Ú__init__rO   r:   ©r   rO   r:   s      r    rR   zDynamicChild.__init__€   s%   € ÝÔ˜$ÑÔÐØˆŒ	ØˆŒˆˆr"   )rF   rG   rH   rI   Úbytesr   rR   rL   r"   r    rN   rN   {   sG   € € € € € ðð ð˜Uð ¨Xð ¸$ð ð ð ð ð ð r"   rN   c                   ó&   — e Zd ZdZdededefd„ZdS )ÚDynamicChildrenz.
    A L{Resource} with dynamic children.
    rO   r:   r   c                 ó"   — t          ||¦  «        S rQ   )rN   rS   s      r    r.   zDynamicChildren.getChild‹   s   € Ý˜D 'Ñ*Ô*Ð*r"   N)rF   rG   rH   rI   rT   r   rN   r.   rL   r"   r    rV   rV   †   sG   € € € € € ðð ð+˜Uð +¨Xð +¸,ð +ð +ð +ð +ð +ð +r"   rV   c                   ó2   — e Zd ZdZdeddfd„Zdedefd„ZdS )ÚBytesReturnedRenderablezG
    A L{Resource} with minimal capabilities to render a response.
    Úresponser   Nc                 ó<   — t          j        | ¦  «         || _        dS )zo
        @param response: A C{bytes} object giving the value to return from
            C{render_GET}.
        N)r	   rR   Ú	_response)r   rZ   s     r    rR   z BytesReturnedRenderable.__init__”   s    € õ
 	Ô˜$ÑÔÐØ!ˆŒˆˆr"   r:   c                 ó   — | j         S )z}
        Render a response to a I{GET} request by returning a short byte string
        to be written by the server.
        )r\   ©r   r:   s     r    Ú
render_GETz"BytesReturnedRenderable.render_GETœ   s   € ð
 Œ~Ðr"   )rF   rG   rH   rI   rT   rR   r/   r_   rL   r"   r    rY   rY   �   sb   € € € € € ðð ð" ð "¨4ð "ð "ð "ð "ð &ð ¨Uð ð ð ð ð ð r"   rY   c                   ó2   — e Zd ZdZdeddfd„Zdeddfd„ZdS )ÚImplicitAllowedMethodszn
    A L{Resource} which implicitly defines its allowed methods by defining
    renderers to handle them.
    r:   r   Nc                 ó   — d S rQ   rL   r^   s     r    r_   z!ImplicitAllowedMethods.render_GETª   ó   € Øˆr"   c                 ó   — d S rQ   rL   r^   s     r    Ú
render_PUTz!ImplicitAllowedMethods.render_PUT­   rc   r"   )rF   rG   rH   rI   r/   r_   re   rL   r"   r    ra   ra   ¤   sb   € € € € € ðð ð
 &ð ¨Tð ð ð ð ð &ð ¨Tð ð ð ð ð ð r"   ra   c                   óB   — 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S )ÚResourceTestsz 
    Tests for L{Resource}.
    r   Nc           	      ó   — t          ¦   «         }t          ¦   «         }t          ¦   «         }|                     d|¦  «         |                     d|¦  «         |                      ||                     dt	          g ¦  «        ¦  «        ¦  «         dS )z½
        L{Resource.putChild} adds a I{static} child to the resource.  That child
        is returned from any call to L{Resource.getChildWithDefault} for the
        child's path.
        ó   fooó   barN)r	   ÚputChildr-   ÚgetChildWithDefaultr   ©r   ÚresourceÚchildÚsiblings       r    Útest_staticChildrenz!ResourceTests.test_staticChildren¶   sŠ   € õ ‘:”:ˆÝ‘
”
ˆÝ‘*”*ˆØ×Ò˜& %Ñ(Ô(Ð(Ø×Ò˜& 'Ñ*Ô*Ð*Ø×ÒØ�8×/Ò/°½ÀRÑ8HÔ8HÑIÔIñ	
ô 	
ð 	
ð 	
ð 	
r"   c                 ó  — d}t          g ¦  «        }t          ¦   «         }|                     ||¦  «        }|                      |t          ¦  «         |                      |j        |¦  «         |                      |j        |¦  «         dS )zœ
        L{Resource.getChildWithDefault} delegates to L{Resource.getChild} when
        the requested path is not associated with any static child.
        ri   N)	r   rV   rl   ÚassertIsInstancerN   r   rO   r-   r:   )r   rO   r:   rn   ro   s        r    Útest_dynamicChildrenz"ResourceTests.test_dynamicChildrenÅ   s‚   € ð
 ˆÝ˜rÑ"Ô"ˆÝ"Ñ$Ô$ˆØ×,Ò,¨T°7Ñ;Ô;ˆØ×Ò˜e¥\Ñ2Ô2Ð2Ø×Ò˜œ TÑ*Ô*Ð*Ø×Ò˜Uœ]¨GÑ4Ô4Ð4Ð4Ð4r"   c                 óâ   — t          ¦   «         }t          ¦   «         }t          ¦   «         }|                      t          |j        d|¦  «         |                      t          |j        d|¦  «         dS )zv
        Test that passing the wrong type to putChild results in a warning,
        and a failure in Python 3
        r+   N)r	   ÚassertRaisesÚ	TypeErrorrk   rm   s       r    Útest_staticChildPathTypez&ResourceTests.test_staticChildPathTypeÒ   s_   € õ
 ‘:”:ˆÝ‘
”
ˆÝ‘*”*ˆØ×Ò�) XÔ%6¸¸uÑEÔEÐEØ×Ò�) XÔ%6¸¸gÑFÔFÐFÐFÐFr"   c                 ó¦   — d}t          g ¦  «        }d|_        t          |¦  «        }|                      ||                     |¦  «        ¦  «         dS )z„
        When not otherwise overridden, L{Resource.render} treats a I{HEAD}
        request as if it were a I{GET} request.
        s   insert response hereó   HEADN)r   ÚmethodrY   r   r6   )r   r<   r:   rn   s       r    Útest_defaultHEADzResourceTests.test_defaultHEADÝ   sR   € ð
 +ˆÝ˜rÑ"Ô"ˆØ ˆŒÝ*¨8Ñ4Ô4ˆØ×Ò˜ 8§?¢?°7Ñ#;Ô#;Ñ<Ô<Ð<Ð<Ð<r"   c                 ó  — g d¢}t          ¦   «         }||_        t          g ¦  «        }d|_        |                      t
          |j        |¦  «        }|                      t          |¦  «        t          |j        ¦  «        ¦  «         dS )zò
        The L{UnsupportedMethod} raised by L{Resource.render} for an unsupported
        request method has a C{allowedMethods} attribute set to the value of the
        C{allowedMethods} attribute of the L{Resource}, if it has one.
        )ó   GETrz   ó   PUTó	   FICTIONALN)	r	   ÚallowedMethodsr   r{   rv   r   r6   r   Úset©r   r<   rn   r:   Úexcs        r    Útest_explicitAllowedMethodsz)ResourceTests.test_explicitAllowedMethodsè   s{   € ð -Ð,Ð,ˆÝ‘:”:ˆØ"*ˆÔÝ˜rÑ"Ô"ˆØ%ˆŒØ×ÒÕ 1°8´?ÀGÑLÔLˆØ×Ò�˜X™œ­¨CÔ,>Ñ(?Ô(?Ñ@Ô@Ð@Ð@Ð@r"   c                 óè   — h d£}t          ¦   «         }t          g ¦  «        }d|_        |                      t          |j        |¦  «        }|                      |t          |j        ¦  «        ¦  «         dS )al  
        The L{UnsupportedMethod} raised by L{Resource.render} for an unsupported
        request method has a C{allowedMethods} attribute set to a list of the
        methods supported by the L{Resource}, as determined by the
        I{render_}-prefixed methods which it defines, if C{allowedMethods} is
        not explicitly defined by the L{Resource}.
        >   r~   r   rz   r€   N)	ra   r   r{   rv   r   r6   r   r‚   r�   rƒ   s        r    Útest_implicitAllowedMethodsz)ResourceTests.test_implicitAllowedMethodsö   so   € ð -Ð,Ð,ˆÝ)Ñ+Ô+ˆÝ˜rÑ"Ô"ˆØ%ˆŒØ×ÒÕ 1°8´?ÀGÑLÔLˆØ×Ò˜¥3 sÔ'9Ñ#:Ô#:Ñ;Ô;Ð;Ð;Ð;r"   rE   )
rF   rG   rH   rI   rq   rt   rx   r|   r…   r‡   rL   r"   r    rg   rg   ±   sž   € € € € € ðð ð
ð 
ð 
ð 
ð5ð 5ð 5ð 5ð	Gð 	Gð 	Gð 	Gð	=ð 	=ð 	=ð 	=ðAð Að Að Að<ð <ð <ð <ð <ð <r"   rg   c                   ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )ÚGetChildForRequestTestsz*
    Tests for L{getChildForRequest}.
    r   Nc                 óŒ   — t          g ¦  «        }t          ¦   «         }t          ||¦  «        }|                      ||¦  «         dS )zŠ
        L{getChildForRequest} returns whatever resource has been reached by the
        time the request's C{postpath} is empty.
        N)r   r	   r   r-   ©r   r:   rn   Úresults       r    Útest_exhaustedPostPathz.GetChildForRequestTests.test_exhaustedPostPath  sE   € õ
 ˜rÑ"Ô"ˆÝ‘:”:ˆÝ# H¨gÑ6Ô6ˆØ×Ò˜X vÑ.Ô.Ð.Ð.Ð.r"   c                 óž   — t          ddg¦  «        }t          ¦   «         }d|_        t          ||¦  «        }|                      ||¦  «         dS )zƒ
        L{getChildForRequest} returns the first resource it encounters with a
        C{isLeaf} attribute set to C{True}.
        ri   rj   TN)r   r	   ÚisLeafr   r-   r‹   s       r    Útest_leafResourcez)GetChildForRequestTests.test_leafResource  sQ   € õ
  ¨Ð/Ñ0Ô0ˆÝ‘:”:ˆØˆŒÝ# H¨gÑ6Ô6ˆØ×Ò˜X vÑ.Ô.Ð.Ð.Ð.r"   c                 óR  — t          ddg¦  «        }t          ¦   «         }t          ¦   «         }d|_        |                     d|¦  «         |                      |t          ||¦  «        ¦  «         |                      |j        dg¦  «         |                      |j        dg¦  «         dS )zƒ
        As path segments from the request are traversed, they are taken from
        C{postpath} and put into C{prepath}.
        ri   rj   TN)	r   r	   r�   rk   r-   r   r   ÚprepathÚpostpath)r   r:   Úrootro   s       r    Útest_postPathToPrePathz.GetChildForRequestTests.test_postPathToPrePath   sŸ   € õ
  ¨Ð/Ñ0Ô0ˆÝ‰zŒzˆÝ‘
”
ˆØˆŒØ�Š�f˜eÑ$Ô$Ð$Ø×Ò˜UÕ$6°t¸WÑ$EÔ$EÑFÔFÐFØ×Ò˜œ¨6¨(Ñ3Ô3Ð3Ø×Ò˜Ô)¨F¨8Ñ4Ô4Ð4Ð4Ð4r"   rE   )rF   rG   rH   rI   r�   r�   r•   rL   r"   r    r‰   r‰     sZ   € € € € € ðð ð/ð /ð /ð /ð	/ð 	/ð 	/ð 	/ð5ð 5ð 5ð 5ð 5ð 5r"   r‰   N)rI   Útwisted.trial.unittestr   Útwisted.web.errorr   Útwisted.web.http_headersr   Útwisted.web.iwebr   Útwisted.web.resourcer   r   r	   r
   r   r   r'   r   r$   r   Útwisted.web.test.requesthelperr   r   rN   rV   rY   ra   rg   r‰   rL   r"   r    ú<module>rœ      s  ððð ð ,Ð +Ð +Ð +Ð +Ð +Ø /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7ð`Oð `Oð `Oð `Oð `O�Xñ `Oô `Oð `OðFð ð ð ð �8ñ ô ð ð+ð +ð +ð +ð +�hñ +ô +ð +ðð ð ð ð ˜hñ ô ð ð*
ð 
ð 
ð 
ð 
˜Xñ 
ô 
ð 
ðR<ð R<ð R<ð R<ð R<�Hñ R<ô R<ð R<ðj&5ð &5ð &5ð &5ð &5˜hñ &5ô &5ð &5ð &5ð &5r"   