§
    ÉtºfðZ  ã                  óª   — 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 dd„Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )z(
Tests for L{twisted.web.http_headers}.
é    )Úannotations)ÚSequence)ÚTestCase)ÚHeaders)ÚbytesLinearWhitespaceComponentsÚsanitizedBytesÚtextLinearWhitespaceComponentsÚtestCaser   Ú
componentsúSequence[bytes] | Sequence[str]ÚexpectedÚbytesÚreturnÚNonec                ó  — |D �]}g }|                      t          ||gi¦  «        ¦  «         t          ¦   «         }|                     ||¦  «         |                      |¦  «         t          ¦   «         }|                     ||g¦  «         |                      |¦  «         |D ]e}|                      t          |                     ¦   «         ¦  «        ||gfg¦  «         |                      |                     |¦  «        |g¦  «         Œf�ŒdS )a  
    Assert that the components are sanitized to the expected value as
    both a header name and value, across all of L{Header}'s setters
    and getters.

    @param testCase: A test case.

    @param components: A sequence of values that contain linear
        whitespace to use as header names and values; see
        C{textLinearWhitespaceComponents} and
        C{bytesLinearWhitespaceComponents}

    @param expected: The expected sanitized form of the component for
        both headers names and their values.
    N)Úappendr   ÚaddRawHeaderÚsetRawHeadersÚassertEqualÚlistÚgetAllRawHeadersÚgetRawHeaders)r
   r   r   Ú	componentÚheadersÚaddedÚ	setHeaderÚheaders           úa/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/test/test_http_headers.pyÚassertSanitizedr      s(  € ð$  ð Mñ Mˆ	ØˆØ�Š•w 	¨I¨;Ð7Ñ8Ô8Ñ9Ô9Ð9å‘	”	ˆØ×Ò˜9 iÑ0Ô0Ð0Ø�Š�uÑÔÐå‘I”Iˆ	Ø×Ò 	¨I¨;Ñ7Ô7Ð7Ø�Š�yÑ!Ô!Ð!àð 	Mð 	MˆFØ× Ò Ý�V×,Ò,Ñ.Ô.Ñ/Ô/°8¸h¸ZÐ2HÐ1Iñô ð ð × Ò  ×!5Ò!5°hÑ!?Ô!?À(ÀÑLÔLÐLÐLñ		MðMð Mó    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d„Zdd„Zdd„ZdS )ÚBytesHeadersTestszE
    Tests for L{Headers}, using L{bytes} arguments for methods.
    r   r   c                ó<   — t          | t          t          ¦  «         dS ©zf
        Linear whitespace in header names or values is replaced with a
        single space.
        N)r   r   r   ©Úselfs    r   Útest_sanitizeLinearWhitespacez/BytesHeadersTests.test_sanitizeLinearWhitespace>   s   € õ
 	˜Õ=½~ÑNÔNÐNÐNÐNr    c                ó~   — t          ddgi¦  «        }|                      |                     d¦  «        dg¦  «         dS )zx
        The header values passed to L{Headers.__init__} can be retrieved via
        L{Headers.getRawHeaders}.
        s   Fooó   baró   fooN©r   r   r   ©r&   Úhs     r   Útest_initializerz"BytesHeadersTests.test_initializerE   sB   € õ
 �V˜f˜XÐ&Ñ'Ô'ˆØ×Ò˜Ÿš¨Ñ0Ô0°6°(Ñ;Ô;Ð;Ð;Ð;r    c                óH  — ddg}t          ¦   «         }|                     d|¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        |¦  «         dS )zŠ
        L{Headers.setRawHeaders} sets the header values for the given
        header name to the sequence of byte string values.
        ó   value1ó   value2ó   testó   TestN©r   r   Ú
assertTrueÚ	hasHeaderr   r   )r&   ÚrawValuer-   s      r   Útest_setRawHeadersz$BytesHeadersTests.test_setRawHeadersM   s�   € ð
 ˜yÐ)ˆÝ‰IŒIˆØ	�Š˜ Ñ*Ô*Ð*Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¨Ñ1Ô1°8Ñ<Ô<Ð<Ð<Ð<r    c                ó$  — t          ¦   «         }|                     dd¦  «         |                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        ddg¦  «         dS )úN
        L{Headers.addRawHeader} adds a new value for a given header.
        r2   ó   lemuró   pandaN©r   r   r   r   r,   s     r   Útest_addRawHeaderz#BytesHeadersTests.test_addRawHeaderY   s†   € õ ‰IŒIˆØ	�Š�w Ñ)Ô)Ð)Ø×Ò˜Ÿš¨Ñ1Ô1°H°:Ñ>Ô>Ð>Ø	�Š�w Ñ)Ô)Ð)Ø×Ò˜Ÿš¨Ñ1Ô1°H¸hÐ3GÑHÔHÐHÐHÐHr    c                ón   — |                       t          ¦   «                              d¦  «        ¦  «         dS )úz
        L{Headers.getRawHeaders} returns L{None} if the header is not found and
        no default is specified.
        r2   N©ÚassertIsNoner   r   r%   s    r   Útest_getRawHeadersNoDefaultz-BytesHeadersTests.test_getRawHeadersNoDefaultc   s0   € ð
 	×Ò�'™)œ)×1Ò1°'Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r    c                ó’   — t          ¦   «         }t          ¦   «         }|                      |                     d|¦  «        |¦  «         dS )úo
        L{Headers.getRawHeaders} returns the specified default value when no
        header is found.
        r2   N)r   ÚobjectÚassertIdenticalr   ©r&   r-   Údefaults      r   Útest_getRawHeadersDefaultValuez0BytesHeadersTests.test_getRawHeadersDefaultValuej   s@   € õ
 ‰IŒIˆÝ‘(”(ˆØ×Ò˜QŸ_š_¨W°gÑ>Ô>ÀÑHÔHÐHÐHÐHr    c                ó  — t          ¦   «         }dg}|                     d|¦  «         |                      |                     d|¦  «        d         t          ¦  «         |                      |                     d|¦  «        dg¦  «         dS )zÏ
        If the object passed as the value list to L{Headers.setRawHeaders}
        is later passed as a default to L{Headers.getRawHeaders}, the
        result nevertheless contains encoded values.
        Úvalueó   keyr   ó   valueN)r   r   ÚassertIsInstancer   r   r   rH   s      r   Ú*test_getRawHeadersWithDefaultMatchingValuez<BytesHeadersTests.test_getRawHeadersWithDefaultMatchingValues   s}   € õ ‰IŒIˆØ�)ˆØ	�Š˜ Ñ(Ô(Ð(Ø×Ò˜aŸošo¨f°gÑ>Ô>¸qÔAÅ5ÑIÔIÐIØ×Ò˜Ÿš¨°Ñ9Ô9¸H¸:ÑFÔFÐFÐFÐFr    c                óø   — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         dS )úm
        L{Headers.getRawHeaders} returns the values which have been set for a
        given header.
        r2   r;   r3   N©r   r   r   r   r,   s     r   Útest_getRawHeadersz$BytesHeadersTests.test_getRawHeaders   sq   € õ
 ‰IŒIˆØ	�Š˜ ( Ñ,Ô,Ð,Ø×Ò˜Ÿš¨Ñ1Ô1°H°:Ñ>Ô>Ð>Ø×Ò˜Ÿš¨Ñ1Ô1°H°:Ñ>Ô>Ð>Ð>Ð>r    c                óð   — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         dS )úi
        Check that L{Headers.hasHeader} returns C{True} when the given header
        is found.
        r2   r;   r3   N©r   r   r5   r6   r,   s     r   Útest_hasHeaderTruez$BytesHeadersTests.test_hasHeaderTrue‰   se   € õ
 ‰IŒIˆØ	�Š˜ ( Ñ,Ô,Ð,Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r    c                ón   — |                       t          ¦   «                              d¦  «        ¦  «         dS )úc
        L{Headers.hasHeader} returns C{False} when the given header is not
        found.
        r2   N©ÚassertFalser   r6   r%   s    r   Útest_hasHeaderFalsez%BytesHeadersTests.test_hasHeaderFalse“   s0   € ð
 	×Ò�™œ×,Ò,¨WÑ5Ô5Ñ6Ô6Ð6Ð6Ð6r    c                ó  — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                     d¦  «         |                      |                     d¦  «        ¦  «         |                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                     d¦  «         |                      |                     d¦  «        ¦  «         dS )úN
        Check that L{Headers.removeHeader} removes the given header.
        r*   r;   r)   r<   s   BarN©r   r   r5   r6   ÚremoveHeaderr\   r,   s     r   Útest_removeHeaderz#BytesHeadersTests.test_removeHeaderš   sß   € õ ‰IŒIˆà	�Š˜  
Ñ+Ô+Ð+Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø	�Š�vÑÔÐØ×Ò˜Ÿš VÑ,Ô,Ñ-Ô-Ð-à	�Š˜  
Ñ+Ô+Ð+Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø	�Š�vÑÔÐØ×Ò˜Ÿš VÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r    c                ó¶   — t          ¦   «         }|                     d¦  «         |                      t          |                     ¦   «         ¦  «        g ¦  «         dS )úk
        L{Headers.removeHeader} is a no-operation when the specified header is
        not found.
        r2   N©r   ra   r   r   r   r,   s     r   Útest_removeHeaderDoesntExistz.BytesHeadersTests.test_removeHeaderDoesntExistª   sO   € õ
 ‰IŒIˆØ	�Š�wÑÔÐØ×Ò�˜a×0Ò0Ñ2Ô2Ñ3Ô3°RÑ8Ô8Ð8Ð8Ð8r    c                ó¨  — t          ¦   «         }|                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d	¦  «        d
¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         dS )zk
        L{Headers._encodeName} returns the canonical capitalization for
        the given header.
        r2   r3   s
   test-stuffs
   Test-Stuffs   content-md5ó   Content-MD5s   dnts   DNTs   etags   ETags   p3ps   P3Ps   tes   TEó   www-authenticateó   WWW-Authenticates   WWW-authenticates   Www-Authenticates   x-xss-protections   X-XSS-ProtectionN)r   r   Ú_encodeNamer,   s     r   Útest_encodeNamez!BytesHeadersTests.test_encodeName³   s‘  € õ
 ‰IŒIˆØ×Ò˜Ÿš wÑ/Ô/°Ñ9Ô9Ð9Ø×Ò˜Ÿš }Ñ5Ô5°}ÑEÔEÐEØ×Ò˜Ÿš ~Ñ6Ô6¸ÑGÔGÐGØ×Ò˜Ÿš vÑ.Ô.°Ñ7Ô7Ð7Ø×Ò˜Ÿš wÑ/Ô/°Ñ9Ô9Ð9Ø×Ò˜Ÿš vÑ.Ô.°Ñ7Ô7Ð7Ø×Ò˜Ÿš uÑ-Ô-¨uÑ5Ô5Ð5Ø×Ò˜ŸšÐ':Ñ;Ô;Ð=PÑQÔQÐQØ×Ò˜ŸšÐ':Ñ;Ô;Ð=PÑQÔQÐQØ×Ò˜ŸšÐ':Ñ;Ô;Ð=PÑQÔQÐQØ×Ò˜ŸšÐ':Ñ;Ô;Ð=PÑQÔQÐQÐQÐQr    c                óê   — t          ¦   «         }|                     ddg¦  «         |                     ddg¦  «         d„ |                     ¦   «         D ¦   «         }|                      |ddh¦  «         dS )	úÇ
        L{Headers.getAllRawHeaders} returns an iterable of (k, v) pairs, where
        C{k} is the canonicalized representation of the header name, and C{v}
        is a sequence of values.
        r2   ó   lemursri   ó   basic aksljdlk=c                ó6   — h | ]\  }}|t          |¦  «        f’ŒS © ©Útuple©Ú.0ÚkÚvs      r   ú	<setcomp>z:BytesHeadersTests.test_getAllRawHeaders.<locals>.<setcomp>Ï   ó&   € ÐEÐEÐE©¨¨1�q�% ™(œ(�mÐEÐEÐEr    ©rj   )rp   )r3   ©ro   N©r   r   r   r   ©r&   r-   Ú
allHeaderss      r   Útest_getAllRawHeadersz'BytesHeadersTests.test_getAllRawHeadersÅ   s‰   € õ ‰IŒIˆØ	�Š˜ ) Ñ-Ô-Ð-Ø	�ŠÐ+Ð.@Ð-AÑBÔBÐBàEÐE°×0BÒ0BÑ0DÔ0DÐEÑEÔEˆ
à×ÒØØ9Ð;RÐSñ	
ô 	
ð 	
ð 	
ð 	
r    c                ój  — t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     dddg¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         dS )ú�
        A L{Headers} instance compares equal to itself and to another
        L{Headers} instance with the same values.
        r*   r<   r;   N©r   r   r   ÚassertNotEqual)r&   ÚfirstÚsecondÚthirds       r   Útest_headersComparisonz(BytesHeadersTests.test_headersComparisonÖ   s²   € õ
 ‘	”	ˆØ×Ò˜F X JÑ/Ô/Ð/Ý‘”ˆØ×Ò˜V h ZÑ0Ô0Ð0Ý‘	”	ˆØ×Ò˜F X¨xÐ$8Ñ9Ô9Ð9Ø×Ò˜ Ñ&Ô&Ð&Ø×Ò˜ Ñ'Ô'Ð'Ø×Ò˜E 5Ñ)Ô)Ð)Ð)Ð)r    c                ó¾   — t          ¦   «         }|                      |d¦  «         |                      |t          ¦   «         ¦  «         |                      |d¦  «         dS )úf
        An instance of L{Headers} does not compare equal to other unrelated
        objects.
        rr   r*   N©r   r„   rF   r,   s     r   Útest_otherComparisonz&BytesHeadersTests.test_otherComparisonå   sY   € õ
 ‰IŒIˆØ×Ò˜A˜rÑ"Ô"Ð"Ø×Ò˜A�v™xœxÑ(Ô(Ð(Ø×Ò˜A˜vÑ&Ô&Ð&Ð&Ð&r    c           
     ó²   — d}d}d}|                       t          t          |||gi¦  «        ¦  «        d|                     ¦   «         ›d|›d|›d�¦  «         dS )	zy
        The L{repr} of a L{Headers} instance shows the names and values of all
        the headers it contains.
        r*   r)   ó   bazú	Headers({ú: [ú, ú]})N©r   Úreprr   Ú
capitalize©r&   ÚfooÚbarÚbazs       r   Ú	test_reprzBytesHeadersTests.test_reprï   sy   € ð
 ˆØˆØˆØ×ÒÝ•˜#  S˜zÐ*Ñ+Ô+Ñ,Ô,ØD˜ŸšÑ)Ô)ÐDÐD°ÐDÐD¸ÐDÐDÐDñ	
ô 	
ð 	
ð 	
ð 	
r    c           
     ó²   — d}d}d}|                       t          t          |||gi¦  «        ¦  «        d|                     ¦   «         ›d|›d|›d�¦  «         dS )	z¡
        The L{repr} of a L{Headers} instance shows the names and values of all
        the headers it contains, not attempting to decode any raw bytes.
        r*   s   barás   bazár�   r�   r‘   r’   Nr“   r–   s       r   Útest_reprWithRawBytesz'BytesHeadersTests.test_reprWithRawBytesü   s{   € ð ˆð ˆØˆØ×ÒÝ•˜#  S˜zÐ*Ñ+Ô+Ñ,Ô,ØD˜ŸšÑ)Ô)ÐDÐD°ÐDÐD¸ÐDÐDÐDñ	
ô 	
ð 	
ð 	
ð 	
r    c           
     óÐ   — d}d}d} G d„ dt           ¦  «        }|                      t           ||||gi¦  «        ¦  «        d|                     ¦   «         ›d|›d|›d	�¦  «         d
S )ú’
        The L{repr} of an instance of a subclass of L{Headers} uses the name
        of the subclass instead of the string C{"Headers"}.
        r*   r)   rŽ   c                  ó   — e Zd ZdS )ú9BytesHeadersTests.test_subclassRepr.<locals>.FunnyHeadersN©Ú__name__Ú
__module__Ú__qualname__rr   r    r   ÚFunnyHeadersr      ó   € € € € € ØˆDr    r¥   úFunnyHeaders({r�   r‘   r’   N)r   r   r”   r•   )r&   r—   r˜   r™   r¥   s        r   Útest_subclassReprz#BytesHeadersTests.test_subclassRepr  s§   € ð
 ˆØˆØˆð	ð 	ð 	ð 	ð 	�7ñ 	ô 	ð 	ð 	×ÒÝ��˜s S¨# JÐ/Ñ0Ô0Ñ1Ô1ØI˜cŸnšnÑ.Ô.ÐIÐI°SÐIÐI¸cÐIÐIÐIñ	
ô 	
ð 	
ð 	
ð 	
r    c                óÎ  — t          ¦   «         }|                     ddg¦  «         |                     ¦   «         }|                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        ddg¦  «         dS )ú¶
        L{Headers.copy} creates a new independent copy of an existing
        L{Headers} instance, allowing future modifications without impacts
        between the copies.
        r2   r*   r)   rŽ   N©r   r   Úcopyr   r   r   ©r&   r-   Úis      r   Ú	test_copyzBytesHeadersTests.test_copy  sÍ   € õ ‰IŒIˆØ	�Š˜ & Ñ*Ô*Ð*Ø�FŠF‰HŒHˆØ×Ò˜Ÿš¨Ñ1Ô1°F°8Ñ<Ô<Ð<Ø	�Š�w Ñ'Ô'Ð'Ø×Ò˜Ÿš¨Ñ1Ô1°F°8Ñ<Ô<Ð<Ø	�Š�w Ñ'Ô'Ð'Ø×Ò˜Ÿš¨Ñ1Ô1°F¸FÐ3CÑDÔDÐDÐDÐDr    c                ó   — t          ¦   «         }t          t           j        dz   ¦  «        D ]}|                     d|› �d¦  «         Œ|                      t          t           j        ¦  «        t           j        ¦  «         dS )zH
        Only a limited number of HTTP header names get cached.
        éÈ   zhello-rL   N)r   ÚrangeÚ_MAX_CACHED_HEADERSr   r   ÚlenÚ_canonicalHeaderCache)r&   r   r®   s      r   Útest_max_cached_headersz)BytesHeadersTests.test_max_cached_headers-  s€   € õ ‘)”)ˆÝ•wÔ2°SÑ8Ñ9Ô9ð 	8ð 	8ˆAØ× Ò  ¨!  ¨wÑ7Ô7Ð7Ð7Ø×ÒÝ•Ô-Ñ.Ô.µÔ0Kñ	
ô 	
ð 	
ð 	
ð 	
r    N©r   r   )r¢   r£   r¤   Ú__doc__r'   r.   r8   r>   rC   rJ   rP   rT   rX   r]   rb   rf   rl   r€   rˆ   rŒ   rš   rœ   r¨   r¯   r¶   rr   r    r   r"   r"   9   sÚ  € € € € € ðð ðOð Oð Oð Oð<ð <ð <ð <ð
=ð 
=ð 
=ð 
=ðIð Ið Ið Ið<ð <ð <ð <ðIð Ið Ið Ið
Gð 
Gð 
Gð 
Gð?ð ?ð ?ð ?ð.ð .ð .ð .ð7ð 7ð 7ð 7ð.ð .ð .ð .ð 9ð 9ð 9ð 9ðRð Rð Rð Rð$
ð 
ð 
ð 
ð"*ð *ð *ð *ð'ð 'ð 'ð 'ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð"
ð 
ð 
ð 
ð"Eð Eð Eð Eð	
ð 	
ð 	
ð 	
ð 	
ð 	
r    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d„Zdd„Zdd„ZdS )ÚUnicodeHeadersTestszC
    Tests for L{Headers}, using L{str} arguments for methods.
    r   r   c                ó<   — t          | t          t          ¦  «         dS r$   )r   r	   r   r%   s    r   r'   z1UnicodeHeadersTests.test_sanitizeLinearWhitespace>  s   € õ
 	˜Õ<½nÑMÔMÐMÐMÐMr    c                óÒ   — t          ddgi¦  «        }|                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         dS )aC  
        The header values passed to L{Headers.__init__} can be retrieved via
        L{Headers.getRawHeaders}. If a L{bytes} argument is given, it returns
        L{bytes} values, and if a L{str} argument is given, it returns
        L{str} values. Both are the same header value, just encoded or
        decoded.
        ÚFoor˜   r*   r)   r—   Nr+   r,   s     r   r.   z$UnicodeHeadersTests.test_initializerE  sf   € õ �U˜U˜GÐ$Ñ%Ô%ˆØ×Ò˜Ÿš¨Ñ0Ô0°6°(Ñ;Ô;Ð;Ø×Ò˜Ÿš¨Ñ/Ô/°%°Ñ9Ô9Ð9Ð9Ð9r    c                óB  — ddg}ddg}t          ¦   «         }|                     d|¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        |¦  «         |                      |                     d¦  «        |¦  «         d	S )
zˆ
        L{Headers.setRawHeaders} sets the header values for the given
        header name to the sequence of strings, encoded.
        Úvalue1Úvalue2r0   r1   Útestr2   r3   ÚTestNr4   )r&   r7   ÚrawEncodedValuer-   s       r   r8   z&UnicodeHeadersTests.test_setRawHeadersQ  s÷   € ð
 ˜hÐ'ˆØ$ iÐ0ˆÝ‰IŒIˆØ	�Š˜ Ñ)Ô)Ð)Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø�Š˜Ÿš FÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš¨Ñ0Ô0°(Ñ;Ô;Ð;Ø×Ò˜Ÿš¨Ñ1Ô1°?ÑCÔCÐCÐCÐCr    c                óD  — t          ¦   «         }|                      t          ¦  «        5  |                     ddg¦  «         ddd¦  «         n# 1 swxY w Y   |                      t          ¦  «        5  |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zÉ
        Passing L{str} to any function that takes a header name will encode
        said header name as ISO-8859-1, and if it cannot be encoded, it will
        raise a L{UnicodeDecodeError}.
        õ   â˜ƒÚvalN)r   ÚassertRaisesÚUnicodeEncodeErrorr   r6   r,   s     r   Útest_nameNotEncodablez)UnicodeHeadersTests.test_nameNotEncodablea  s  € õ ‰IŒIˆð ×ÒÕ1Ñ2Ô2ð 	/ð 	/Ø�OŠO˜H u gÑ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð ×ÒÕ1Ñ2Ô2ð 	"ð 	"Ø�KŠK˜Ñ!Ô!Ð!ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s#   ©AÁAÁAÁ2BÂBÂBc                óD  — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        ¦  «         dS )z}
        Passing L{str} to any function that takes a header name will encode
        said header name as ISO-8859-1.
        õ   Ã¡r*   ó   áNr4   r,   s     r   Útest_nameEncodingz%UnicodeHeadersTests.test_nameEncodingp  s�   € õ
 ‰IŒIˆð 	
�Š˜ 6 (Ñ+Ô+Ð+ð 	�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¨Ñ1Ô1°F°8Ñ<Ô<Ð<ð 	�Š˜Ÿš HÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r    c                óø   — t          ¦   «         }|                     dddg¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ddg¦  «         dS )z|
        Passing L{str} to L{Headers.setRawHeaders} will encode the name as
        ISO-8859-1 and values as UTF-8.
        rË   rÅ   r*   rÌ   s   â˜ƒNr4   r,   s     r   Útest_rawHeadersValueEncodingz0UnicodeHeadersTests.test_rawHeadersValueEncoding�  sq   € õ
 ‰IŒIˆØ	�Š˜ 8¨VÐ"4Ñ5Ô5Ð5Ø�Š˜Ÿš GÑ,Ô,Ñ-Ô-Ð-Ø×Ò˜Ÿš¨Ñ1Ô1°OÀVÐ3LÑMÔMÐMÐMÐMr    c                óz  — t          ¦   «         }|                     dd¦  «         |                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        ddg¦  «         |                      |                     d¦  «        ddg¦  «         dS )r:   rÁ   ÚlemurÚpandar2   r;   r<   Nr=   r,   s     r   r>   z%UnicodeHeadersTests.test_addRawHeader‹  s­   € õ ‰IŒIˆØ	�Š�v˜wÑ'Ô'Ð'Ø×Ò˜Ÿš¨Ñ0Ô0°7°)Ñ<Ô<Ð<Ø	�Š�v˜wÑ'Ô'Ð'Ø×Ò˜Ÿš¨Ñ0Ô0°7¸GÐ2DÑEÔEÐEØ×Ò˜Ÿš¨Ñ1Ô1°H¸hÐ3GÑHÔHÐHÐHÐHr    c                ón   — |                       t          ¦   «                              d¦  «        ¦  «         dS )r@   rÁ   NrA   r%   s    r   rC   z/UnicodeHeadersTests.test_getRawHeadersNoDefault–  s0   € ð
 	×Ò�'™)œ)×1Ò1°&Ñ9Ô9Ñ:Ô:Ð:Ð:Ð:r    c                ó–  — t          ¦   «         }t          ¦   «         }|                      |                     d|¦  «        |¦  «         |                      |                     dd¦  «        d¦  «         |                      |                     ddg¦  «        dg¦  «         |                      |                     ddg¦  «        dg¦  «         dS )rE   rÁ   NrÅ   )r   rF   rG   r   r   rH   s      r   rJ   z2UnicodeHeadersTests.test_getRawHeadersDefaultValue�  sÀ   € õ
 ‰IŒIˆÝ‘(”(ˆØ×Ò˜QŸ_š_¨V°WÑ=Ô=¸wÑGÔGÐGØ×Ò˜QŸ_š_¨V°TÑ:Ô:¸DÑAÔAÐAØ×Ò˜Ÿš¨°$°Ñ8Ô8¸4¸&ÑAÔAÐAØ×ÒØ�OŠO˜F ] OÑ4Ô4ØˆOñ	
ô 	
ð 	
ð 	
ð 	
r    c                ó  — t          ¦   «         }dg}|                     d|¦  «         |                      |                     d|¦  «        d         t          ¦  «         |                      |                     d|¦  «        dg¦  «         dS )zÏ
        If the object passed as the value list to L{Headers.setRawHeaders}
        is later passed as a default to L{Headers.getRawHeaders}, the
        result nevertheless contains decoded values.
        rN   rM   Úkeyr   rL   N)r   r   rO   r   Ústrr   rH   s      r   rP   z>UnicodeHeadersTests.test_getRawHeadersWithDefaultMatchingValue¬  s}   € õ ‰IŒIˆØ�*ˆØ	�Š˜ Ñ(Ô(Ð(Ø×Ò˜aŸošo¨e°WÑ=Ô=¸aÔ@Å#ÑFÔFÐFØ×Ò˜Ÿš¨°Ñ8Ô8¸7¸)ÑDÔDÐDÐDÐDr    c                ó   — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         dS )rR   õ   testÃ¡rÑ   õ   TestÃ¡ó   testár;   ó   TestáNrS   r,   s     r   rT   z&UnicodeHeadersTests.test_getRawHeaders¸  s¹   € õ
 ‰IŒIˆØ	�Š˜ w iÑ0Ô0Ð0Ø×Ò˜Ÿš¨Ñ6Ô6¸¸	ÑBÔBÐBØ×Ò˜Ÿš¨Ñ6Ô6¸¸	ÑBÔBÐBØ×Ò˜Ÿš¨Ñ5Ô5¸°zÑBÔBÐBØ×Ò˜Ÿš¨Ñ5Ô5¸°zÑBÔBÐBÐBÐBr    c                ó�  — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         dS )rV   rÙ   rÑ   rÚ   rÛ   rÜ   NrW   r,   s     r   rX   z&UnicodeHeadersTests.test_hasHeaderTrueÄ  s¡   € õ
 ‰IŒIˆØ	�Š˜ w iÑ0Ô0Ð0Ø�Š˜Ÿš LÑ1Ô1Ñ2Ô2Ð2Ø�Š˜Ÿš LÑ1Ô1Ñ2Ô2Ð2Ø�Š˜Ÿš KÑ0Ô0Ñ1Ô1Ð1Ø�Š˜Ÿš KÑ0Ô0Ñ1Ô1Ð1Ð1Ð1r    c                ón   — |                       t          ¦   «                              d¦  «        ¦  «         dS )rZ   rÙ   Nr[   r%   s    r   r]   z'UnicodeHeadersTests.test_hasHeaderFalseÐ  s0   € ð
 	×Ò�™œ×,Ò,¨\Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r    c                ó²  — t          ¦   «         }|                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                     d¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         |                     ddg¦  «         |                      |                     d¦  «        ¦  «         |                     d¦  «         |                      |                     d¦  «        ¦  «         |                      |                     d¦  «        ¦  «         dS )	r_   r—   rÑ   r*   r˜   rÒ   ÚBarr)   Nr`   r,   s     r   rb   z%UnicodeHeadersTests.test_removeHeader×  s  € õ ‰IŒIˆà	�Š˜ ˜yÑ)Ô)Ð)Ø�Š˜Ÿš EÑ*Ô*Ñ+Ô+Ð+Ø	�Š�uÑÔÐØ×Ò˜Ÿš UÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš VÑ,Ô,Ñ-Ô-Ð-à	�Š˜ ˜yÑ)Ô)Ð)Ø�Š˜Ÿš EÑ*Ô*Ñ+Ô+Ð+Ø	�Š�uÑÔÐØ×Ò˜Ÿš UÑ+Ô+Ñ,Ô,Ð,Ø×Ò˜Ÿš VÑ,Ô,Ñ-Ô-Ð-Ð-Ð-r    c                ó¶   — t          ¦   «         }|                     d¦  «         |                      t          |                     ¦   «         ¦  «        g ¦  «         dS )rd   rÁ   Nre   r,   s     r   rf   z0UnicodeHeadersTests.test_removeHeaderDoesntExisté  sO   € õ
 ‰IŒIˆØ	�Š�vÑÔÐØ×Ò�˜a×0Ò0Ñ2Ô2Ñ3Ô3°RÑ8Ô8Ð8Ð8Ð8r    c                ó  — t          ¦   «         }|                     ddg¦  «         |                     ddg¦  «         |                     ddg¦  «         d„ |                     ¦   «         D ¦   «         }|                      |h d£¦  «         d	S )
rn   rÙ   Úlemurszwww-authenticatezbasic aksljdlk=zcontent-md5Úkjdfdfgdfgnsdc                ó6   — h | ]\  }}|t          |¦  «        f’ŒS rr   rs   ru   s      r   ry   z<UnicodeHeadersTests.test_getAllRawHeaders.<locals>.<setcomp>ý  rz   r    >   ©rÜ   r|   ©rh   )s   kjdfdfgdfgnsdr{   Nr}   r~   s      r   r€   z)UnicodeHeadersTests.test_getAllRawHeadersò  s¦   € õ ‰IŒIˆØ	�Š˜ x jÑ1Ô1Ð1Ø	�ŠÐ*Ð->Ð,?Ñ@Ô@Ð@Ø	�Š˜¨Ð'8Ñ9Ô9Ð9àEÐE°×0BÒ0BÑ0DÔ0DÐEÑEÔEˆ
à×ÒØðð ð ñ	
ô 	
ð 	
ð 	
ð 	
r    c                óÎ  — t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     dddg¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     ddg¦  «         t          ¦   «         }|                     dddg¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         dS )r‚   õ   fooÃ¡rÒ   rÑ   s   fooár<   r;   Nrƒ   )r&   r…   r†   r‡   Ú
firstBytesÚsecondBytesÚ
thirdBytess          r   rˆ   z*UnicodeHeadersTests.test_headersComparison  s\  € õ
 ‘	”	ˆØ×Ò˜K¨'¨Ñ3Ô3Ð3Ý‘”ˆØ×Ò˜[¨7¨)Ñ4Ô4Ð4Ý‘	”	ˆØ×Ò˜K¨'°7Ð);Ñ<Ô<Ð<à×Ò˜ Ñ&Ô&Ð&Ø×Ò˜ Ñ'Ô'Ð'Ø×Ò˜E 5Ñ)Ô)Ð)õ ‘Y”Yˆ
Ø× Ò  ¨h¨ZÑ8Ô8Ð8Ý‘i”iˆØ×!Ò! *¨x¨jÑ9Ô9Ð9Ý‘Y”Yˆ
Ø× Ò  ¨h¸Ð-@ÑAÔAÐAà×Ò˜ 
Ñ+Ô+Ð+Ø×Ò˜ Ñ-Ô-Ð-Ø×Ò˜ 
Ñ+Ô+Ð+Ð+Ð+r    c                ó¾   — t          ¦   «         }|                      |d¦  «         |                      |t          ¦   «         ¦  «         |                      |d¦  «         dS )rŠ   rr   r—   Nr‹   r,   s     r   rŒ   z(UnicodeHeadersTests.test_otherComparison$  sY   € õ
 ‰IŒIˆØ×Ò˜A˜rÑ"Ô"Ð"Ø×Ò˜A�v™xœxÑ(Ô(Ð(Ø×Ò˜A˜uÑ%Ô%Ð%Ð%Ð%r    c           
     óæ   — d}d}d}d}d}d|z   }d|z   }|                       t          t          |||gi¦  «        ¦  «        d                     |||                     d¦  «        ¦  «        ¦  «         d	S )
z×
        The L{repr} of a L{Headers} instance shows the names and values of all
        the headers it contains. This shows only reprs of bytes values, as
        undecodable headers may cause an exception.
        ré   õ   barâ˜ƒr™   z	'Foo\xe1'z'bar\xe2\x98\x83'ÚbzHeaders({{{}: [{}, {!r}]}})Úutf8N)r   r”   r   ÚformatÚencode)r&   r—   r˜   r™   Ú
fooEncodedÚ
barEncodeds         r   rš   zUnicodeHeadersTests.test_repr.  s•   € ð ˆØˆØˆØ!ˆ
Ø+ˆ
Ø˜:Ñ%ˆ
Ø˜:Ñ%ˆ
Ø×ÒÝ•˜#  S˜zÐ*Ñ+Ô+Ñ,Ô,Ø)×0Ò0Ø˜J¨¯
ª
°6Ñ(:Ô(:ñô ñ	
ô 	
ð 	
ð 	
ð 	
r    c                óÚ   — d}d}d}d}d} G d„ dt           ¦  «        }|                      t           ||||gi¦  «        ¦  «        d|›d	|›d
|                     d¦  «        ›d�¦  «         dS )rž   ré   rï   r™   z
b'Foo\xe1'zb'bar\xe2\x98\x83'c                  ó   — e Zd ZdS )ú;UnicodeHeadersTests.test_subclassRepr.<locals>.FunnyHeadersNr¡   rr   r    r   r¥   rø   M  r¦   r    r¥   r§   r�   r‘   rñ   r’   N)r   r   r”   ró   )r&   r—   r˜   r™   rô   rõ   r¥   s          r   r¨   z%UnicodeHeadersTests.test_subclassReprB  s²   € ð
 ˆØˆØˆØ"ˆ
Ø,ˆ
ð	ð 	ð 	ð 	ð 	�7ñ 	ô 	ð 	ð 	×ÒÝ��˜s S¨# JÐ/Ñ0Ô0Ñ1Ô1Ð1àˆzˆz˜:˜:˜: s§z¢z°&Ñ'9Ô'9Ð'9Ð'9ð;ñ	
ô 	
ð 	
ð 	
ð 	
r    c                óÌ  — t          ¦   «         }|                     ddg¦  «         |                     ¦   «         }|                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         |                     dd¦  «         |                      |                     d¦  «        ddg¦  «         |                      |                     d¦  «        ddg¦  «         dS )	rª   rÙ   u   fooâ˜ƒrÛ   s   fooâ˜ƒr˜   rŽ   r)   Nr«   r­   s      r   r¯   zUnicodeHeadersTests.test_copyV  sK  € õ ‰IŒIˆØ	�Š˜ { mÑ4Ô4Ð4Ø�FŠF‰HŒHˆð 	×Ò˜Ÿš¨Ñ6Ô6¸¸ÑFÔFÐFØ×Ò˜Ÿš¨Ñ5Ô5Ð8JÐ7KÑLÔLÐLð 	
�Š�| UÑ+Ô+Ð+ð 	×Ò˜Ÿš¨Ñ6Ô6¸¸ÑFÔFÐFØ×Ò˜Ÿš¨Ñ5Ô5Ð8JÐ7KÑLÔLÐLð 	
�Š�| VÑ,Ô,Ð,ð 	×Ò˜Ÿš¨Ñ6Ô6¸ÀeÐ8LÑMÔMÐMØ×Ò˜Ÿš¨Ñ5Ô5Ð8JÈFÐ7SÑTÔTÐTÐTÐTr    Nr·   )r¢   r£   r¤   r¸   r'   r.   r8   rÉ   rÍ   rÏ   r>   rC   rJ   rP   rT   rX   r]   rb   rf   r€   rˆ   rŒ   rš   r¨   r¯   rr   r    r   rº   rº   9  sà  € € € € € ðð ðNð Nð Nð Nð
:ð 
:ð 
:ð 
:ðDð Dð Dð Dð "ð "ð "ð "ð/ð /ð /ð /ð"Nð Nð Nð Nð	Ið 	Ið 	Ið 	Ið;ð ;ð ;ð ;ð
ð 
ð 
ð 
ð
Eð 
Eð 
Eð 
Eð
Cð 
Cð 
Cð 
Cð
2ð 
2ð 
2ð 
2ð<ð <ð <ð <ð.ð .ð .ð .ð$9ð 9ð 9ð 9ð
ð 
ð 
ð 
ð,,ð ,ð ,ð ,ð8&ð &ð &ð &ð
ð 
ð 
ð 
ð(
ð 
ð 
ð 
ð(Uð Uð Uð Uð Uð Ur    rº   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚMixedHeadersTestszm
    Tests for L{Headers}, mixing L{bytes} and L{str} arguments for methods
    where that is permitted.
    r   r   c                ó"  — t          ¦   «         }|                     dd¦  «         |                     dd¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         dS )zL
        L{Headers.addRawHeader} accepts mixed L{str} and L{bytes}.
        ó   bytesr×   ó   Bytesó   strÚStrr   Nr=   r,   s     r   r>   z#MixedHeadersTests.test_addRawHeadery  sƒ   € õ ‰IŒIˆØ	�Š�x Ñ'Ô'Ð'Ø	�Š�u˜hÑ'Ô'Ð'à×Ò˜Ÿš¨Ñ2Ô2°V°HÑ=Ô=Ð=Ø×Ò˜Ÿš¨Ñ/Ô/°'°Ñ;Ô;Ð;Ð;Ð;r    c                ó2  — t          ¦   «         }|                     ddg¦  «         |                     ddg¦  «         |                     dddg¦  «         |                     dddg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        dg¦  «         |                      |                     d¦  «        ddg¦  «         |                      |                     d	¦  «        d
dg¦  «         dS )zM
        L{Headers.setRawHeaders} accepts mixed L{str} and L{bytes}.
        rý   r×   z	mixed-strs   mixed-bytesrþ   r   z	Mixed-Strr   s   Mixed-Bytesrÿ   NrS   r,   s     r   r8   z$MixedHeadersTests.test_setRawHeaders„  s  € õ ‰IŒIˆØ	�Š˜ 8 *Ñ-Ô-Ð-Ø	�Š˜ ˜wÑ'Ô'Ð'Ø	�Š˜ h°Ð%6Ñ7Ô7Ð7Ø	�Š˜¨°Ð(9Ñ:Ô:Ð:à×Ò˜Ÿš¨Ñ2Ô2°X°JÑ?Ô?Ð?Ø×Ò˜Ÿš¨Ñ/Ô/°%°Ñ9Ô9Ð9Ø×Ò˜Ÿš¨Ñ5Ô5¸ÀÐ7GÑHÔHÐHØ×Ò˜Ÿš¨Ñ8Ô8¸6À8Ð:LÑMÔMÐMÐMÐMr    Nr·   )r¢   r£   r¤   r¸   r>   r8   rr   r    r   rû   rû   s  sL   € € € € € ðð ð
	<ð 	<ð 	<ð 	<ðNð Nð Nð Nð Nð Nr    rû   N)r
   r   r   r   r   r   r   r   )r¸   Ú
__future__r   Útypingr   Útwisted.trial.unittestr   Útwisted.web.http_headersr   Útwisted.web.test.requesthelperr   r   r	   r   r"   rº   rû   rr   r    r   ú<module>r     sP  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð"Mð "Mð "Mð "MðJ}
ð }
ð }
ð }
ð }
˜ñ }
ô }
ð }
ð@wUð wUð wUð wUð wU˜(ñ wUô wUð wUðt	Nð Nð Nð Nð N˜ñ Nô Nð Nð Nð Nr    