+
    üÐjMa  ã                  ó¾   € R t ^ RIHt ^ RIHt ^ RIHtHt ^ RIH	t	H
t
Ht ^ RIHtHtHt  ! R R]4      tR R	 lt ! R
 R]4      t ! R R]4      t ! R R]4      tR# )z(
Tests for L{twisted.web.http_headers}.
)Úannotations)ÚSequence)ÚSynchronousTestCaseÚTestCase)ÚHeadersÚInvalidHeaderNameÚ_nameEncoder)ÚbytesLinearWhitespaceComponentsÚsanitizedBytesÚtextLinearWhitespaceComponentsc                  ó>   € ] tR t^tRtR R ltR R ltR R ltRtR	# )
ÚNameEncoderTestsz/
Test L{twisted.web.http_headers._NameEncoder}
c               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚNone© )Úformats   "ÚD/usr/lib/python3/dist-packages/twisted/web/test/test_http_headers.pyÚ__annotate__ÚNameEncoderTests.__annotate__   s   € ÷ Xñ X ñ Xó    c                óJ  € V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R	4      R
4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       R# )zS
L{_NameEncoder.encode} returns the canonical capitalization for
the given header.
ó   testó   Tests
   test-stuffó
   Test-Stuffs   content-md5ó   Content-MD5s   dntó   DNTs   etagó   ETags   p3pó   P3Ps   teó   TEó   www-authenticateó   WWW-Authenticates   WWW-authenticates   Www-Authenticates   x-xss-protectionó   X-XSS-ProtectionN©ÚassertEqualr   Úencode©Úselfs   &r   Útest_encodeNameÚ NameEncoderTests.test_encodeName   s5  € ð
 	×Ñœ×,Ò,¨WÓ5°wÔ?Ø×Ñœ×,Ò,¨]Ó;¸]ÔKØ×Ñœ×,Ò,¨^Ó<¸nÔMØ×Ñœ×,Ò,¨VÓ4°fÔ=Ø×Ñœ×,Ò,¨WÓ5°wÔ?Ø×Ñœ×,Ò,¨VÓ4°fÔ=Ø×Ñœ×,Ò,¨UÓ3°UÔ;Ø×Ñœ×,Ò,Ð-@ÓAÐCVÔWØ×Ñœ×,Ò,Ð-@ÓAÐCVÔWØ×Ñœ×,Ò,Ð-@ÓAÐCVÔWØ×Ñœ×,Ò,Ð-@ÓAÐCVÖWr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   +   s   € ÷ Wñ W Dñ Wr   c                óJ  € V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R	4      R
4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       V P                  \        P                  ! R4      R4       R# )zb
L{_NameEncoder.encode} returns the canonical capitalization for
a header name given as a L{str}.
Útestr   z
test-stuffr   úcontent-md5r   Údntr   Úetagr   Úp3pr    Úter!   úwww-authenticater#   zWWW-authenticatezWww-Authenticatezx-xss-protectionr$   Nr%   r(   s   &r   Útest_encodeNameStrÚ#NameEncoderTests.test_encodeNameStr+   s5  € ð
 	×Ñœ×,Ò,¨VÓ4°gÔ>Ø×Ñœ×,Ò,¨\Ó:¸MÔJØ×Ñœ×,Ò,¨]Ó;¸^ÔLØ×Ñœ×,Ò,¨UÓ3°VÔ<Ø×Ñœ×,Ò,¨VÓ4°gÔ>Ø×Ñœ×,Ò,¨UÓ3°VÔ<Ø×Ñœ×,Ò,¨TÓ2°EÔ:Ø×Ñœ×,Ò,Ð-?Ó@ÐBUÔVØ×Ñœ×,Ò,Ð-?Ó@ÐBUÔVØ×Ñœ×,Ò,Ð-?Ó@ÐBUÔVØ×Ñœ×,Ò,Ð-?Ó@ÐBUÖVr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   <   s   € ÷ 	
ñ 	
 tñ 	
r   c                ó   € \        4       p\        \        P                  ^È,           4       F  pVP	                  RV 2R4       K  	  V P                  \        \        P                  4      \        P                  4       R# )z8
Only a limited number of HTTP header names get cached.
zhello-ÚvalueN)r   Úranger   Ú_MAX_CACHED_HEADERSÚaddRawHeaderr&   ÚlenÚ_canonicalHeaderCache)r)   ÚheadersÚis   &  r   Útest_maxCachedHeadersÚ&NameEncoderTests.test_maxCachedHeaders<   s_   € ô “)ˆÜ”|×7Ñ7¸#Õ=Ö>ˆAØ× Ñ  6¨!¨ ¨wÖ7ñ ?à×ÑÜ”×2Ñ2Ó3´\×5UÑ5Uö	
r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   r5   rA   Ú__static_attributes__r   r   r   r   r      s   † ñõXõ"W÷"	
ñ 	
r   r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   ÚtestCaser   Ú
componentszSequence[bytes] | Sequence[str]ÚexpectedÚbytesr   r   r   )r   s   "r   r   r   H   s2   € ÷  Iñ  IØð IØ$Cð IØOTð Ià	ñ Ir   c                ó¸  € RpV FÑ  p. pVP                  \        W4./4      4       \        4       pVP                  W44       VP                  V4       \        4       pVP                  W4.4       VP                  V4       V FQ  pV P	                  \        VP                  4       4      W2.3.4       V P	                  VP                  V4      V.4       KS  	  KÓ  	  R# )a¶  
Assert that the components are sanitized to the expected value as
both a header 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 values; see
    C{textLinearWhitespaceComponents} and
    C{bytesLinearWhitespaceComponents}

@param expected: The expected sanitized form of the component as
    a header value.
s   NameN)Úappendr   r<   ÚsetRawHeadersr&   ÚlistÚgetAllRawHeadersÚgetRawHeaders)	rJ   rK   rL   ÚnameÚ	componentr?   ÚaddedÚ	setHeaderÚheaders	   &&&      r   ÚassertSanitizedrY   H   s¿   € ð" €DÛˆ	ØˆØ�‰”w  kÐ2Ó3Ô4ä“	ˆØ×Ñ˜4Ô+Ø�‰�uÔä“Iˆ	Ø×Ñ  kÔ2Ø�‰�yÔ!ãˆFØ× Ñ ¤ f×&=Ñ&=Ó&?Ó!@ÀDÈ*ÐCUÐBVÔWØ× Ñ  ×!5Ñ!5°dÓ!;¸h¸ZÖHó ó  r   c                  óþ   € ] tR t^ktRtR R ltR R ltR R ltR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR(tR)# )*ÚBytesHeadersTestsz=
Tests for L{Headers}, using L{bytes} arguments for methods.
c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   ÚBytesHeadersTests.__annotate__p   s   € ÷ Oñ O¨tñ Or   c                ó0   € \        V \        \        4       R# ©zN
Linear whitespace in header names or values is replaced with a
single space.
N)rY   r	   r
   r(   s   &r   Útest_sanitizeLinearWhitespaceÚ/BytesHeadersTests.test_sanitizeLinearWhitespacep   s   € ô
 	˜Ô=¼~ÖNr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   w   s   € ÷ <ñ < $ñ <r   c                óf   € \        RR./4      pV P                  VP                  R4      R.4       R# )z`
The header values passed to L{Headers.__init__} can be retrieved via
L{Headers.getRawHeaders}.
s   Fooó   baró   fooN©r   r&   rS   ©r)   Úhs   & r   Útest_initializerÚ"BytesHeadersTests.test_initializerw   s0   € ô
 �V˜f˜XÐ&Ó'ˆØ×Ñ˜Ÿ™¨Ó0°6°(Ö;r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]      s   € ÷ 
=ñ 
= Dñ 
=r   c                ó  € RR.p\        4       pVP                  RV4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P	                  VP                  R4      V4       R# )zr
L{Headers.setRawHeaders} sets the header values for the given
header name to the sequence of byte string values.
ó   value1ó   value2r   r   N©r   rP   Ú
assertTrueÚ	hasHeaderr&   rS   )r)   ÚrawValuerh   s   &  r   Útest_setRawHeadersÚ$BytesHeadersTests.test_setRawHeaders   sf   € ð
 ˜yÐ)ˆÜ‹IˆØ	�‰˜ Ô*Ø�‰˜Ÿ™ GÓ,Ô-Ø�‰˜Ÿ™ GÓ,Ô-Ø×Ñ˜Ÿ™¨Ó1°8Ö<r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   ‹   s   € ÷ Iñ I 4ñ Ir   c                óì   € \        4       pVP                  RR4       V P                  VP                  R4      R.4       VP                  RR4       V P                  VP                  R4      RR.4       R# )ú>
L{Headers.addRawHeader} adds a new value for a given header.
r   ó   lemuró   pandaN©r   r<   r&   rS   rg   s   & r   Útest_addRawHeaderÚ#BytesHeadersTests.test_addRawHeader‹   s`   € ô ‹IˆØ	�‰�w Ô)Ø×Ñ˜Ÿ™¨Ó1°H°:Ô>Ø	�‰�w Ô)Ø×Ñ˜Ÿ™¨Ó1°H¸hÐ3GÖHr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   •   s   € ÷ <ñ <¨Tñ <r   c                óV   € V P                  \        4       P                  R4      4       R# )úb
L{Headers.getRawHeaders} returns L{None} if the header is not found and
no default is specified.
r   N©ÚassertIsNoner   rS   r(   s   &r   Útest_getRawHeadersNoDefaultÚ-BytesHeadersTests.test_getRawHeadersNoDefault•   s   € ð
 	×Ñœ'›)×1Ñ1°'Ó:Ö;r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   œ   s   € ÷ Iñ I°ñ Ir   c                ór   € \        4       p\        4       pV P                  VP                  RV4      V4       R# )úW
L{Headers.getRawHeaders} returns the specified default value when no
header is found.
r   N)r   ÚobjectÚassertIdenticalrS   ©r)   rh   Údefaults   &  r   Útest_getRawHeadersDefaultValueÚ0BytesHeadersTests.test_getRawHeadersDefaultValueœ   s-   € ô
 ‹IˆÜ“(ˆØ×Ñ˜QŸ_™_¨W°gÓ>ÀÖHr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   ¥   s   € ÷ 
Gñ 
G¸Dñ 
Gr   c                óä   € \        4       pR.pVP                  RV4       V P                  VP                  RV4      ^ ,          \        4       V P                  VP                  RV4      R.4       R# )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.
r9   ó   keyó   valueN)r   rP   ÚassertIsInstancerS   rM   r&   r‰   s   &  r   Ú*test_getRawHeadersWithDefaultMatchingValueÚ<BytesHeadersTests.test_getRawHeadersWithDefaultMatchingValue¥   s]   € ô ‹IˆØ�)ˆØ	�‰˜ Ô(Ø×Ñ˜aŸo™o¨f°gÓ>¸qÕAÄ5ÔIØ×Ñ˜Ÿ™¨°Ó9¸H¸:ÖFr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   ±   s   € ÷ ?ñ ? Dñ ?r   c                óÈ   € \        4       pVP                  RR.4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       R# )úU
L{Headers.getRawHeaders} returns the values which have been set for a
given header.
r   rx   r   N©r   rP   r&   rS   rg   s   & r   Útest_getRawHeadersÚ$BytesHeadersTests.test_getRawHeaders±   sQ   € ô
 ‹IˆØ	�‰˜ ( Ô,Ø×Ñ˜Ÿ™¨Ó1°H°:Ô>Ø×Ñ˜Ÿ™¨Ó1°H°:Ö>r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   »   s   € ÷ .ñ . Dñ .r   c                óÀ   € \        4       pVP                  RR.4       V P                  VP                  R4      4       V P                  VP                  R4      4       R# )úQ
Check that L{Headers.hasHeader} returns C{True} when the given header
is found.
r   rx   r   N©r   rP   rp   rq   rg   s   & r   Útest_hasHeaderTrueÚ$BytesHeadersTests.test_hasHeaderTrue»   sE   € ô
 ‹IˆØ	�‰˜ ( Ô,Ø�‰˜Ÿ™ GÓ,Ô-Ø�‰˜Ÿ™ GÓ,Ö-r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   Å   s   € ÷ 7ñ 7 Tñ 7r   c                óV   € V P                  \        4       P                  R4      4       R# )úK
L{Headers.hasHeader} returns C{False} when the given header is not
found.
r   N©ÚassertFalser   rq   r(   s   &r   Útest_hasHeaderFalseÚ%BytesHeadersTests.test_hasHeaderFalseÅ   s   € ð
 	×Ñœ›×,Ñ,¨WÓ5Ö6r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   Ì   s   € ÷ .ñ . 4ñ .r   c                óª  € \        4       pVP                  RR.4       V P                  VP                  R4      4       VP	                  R4       V P                  VP                  R4      4       VP                  RR.4       V P                  VP                  R4      4       VP	                  R4       V P                  VP                  R4      4       R# )ú>
Check that L{Headers.removeHeader} removes the given header.
re   rx   rd   ry   s   BarN©r   rP   rp   rq   ÚremoveHeaderr¤   rg   s   & r   Útest_removeHeaderÚ#BytesHeadersTests.test_removeHeaderÌ   s›   € ô ‹Iˆà	�‰˜  
Ô+Ø�‰˜Ÿ™ FÓ+Ô,Ø	�‰�vÔØ×Ñ˜Ÿ™ VÓ,Ô-à	�‰˜  
Ô+Ø�‰˜Ÿ™ FÓ+Ô,Ø	�‰�vÔØ×Ñ˜Ÿ™ VÓ,Ö-r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   Ü   ó   € ÷ 9ñ 9¨dñ 9r   c                óŽ   € \        4       pVP                  R4       V P                  \        VP	                  4       4      . 4       R# )úS
L{Headers.removeHeader} is a no-operation when the specified header is
not found.
r   N©r   r«   r&   rQ   rR   rg   s   & r   Útest_removeHeaderDoesntExistÚ.BytesHeadersTests.test_removeHeaderDoesntExistÜ   s5   € ô
 ‹IˆØ	�‰�wÔØ×Ñœ˜a×0Ñ0Ó2Ó3°RÖ8r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   å   ó   € ÷ 
ñ 
 tñ 
r   c                óö   € \        4       pVP                  RR.4       VP                  RR.4       VP                  4        UUu0 uF  w  r#V\        V4      3kK  	  pppV P	                  VRR04       R# u uppi )ú§
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.
r   ó   lemursr"   ó   basic aksljdlk=N©r#   )rº   ©r   )r¹   ©r   rP   rR   Útupler&   ©r)   rh   ÚkÚvÚ
allHeaderss   &    r   Útest_getAllRawHeadersÚ'BytesHeadersTests.test_getAllRawHeaderså   sw   € ô ‹IˆØ	�‰˜ ) Ô-Ø	�‰Ð+Ð.@Ð-AÔBà01×0BÑ0BÔ0DÔEÑ0D©¨�qœ% ›(“mÑ0Dˆ
ÑEà×ÑØØ9Ð;RÐSö	
ùó Fs   ÁA5c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   ö   s   € ÷ *ñ *¨ñ *r   c                ó  € \        4       pVP                  RR.4       \        4       pVP                  RR.4       \        4       pVP                  RRR.4       V P                  W4       V P                  W4       V P                  W4       R# )úi
A L{Headers} instance compares equal to itself and to another
L{Headers} instance with the same values.
re   ry   rx   N©r   rP   r&   ÚassertNotEqual)r)   ÚfirstÚsecondÚthirds   &   r   Útest_headersComparisonÚ(BytesHeadersTests.test_headersComparisonö   s|   € ô
 “	ˆØ×Ñ˜F X JÔ/Ü“ˆØ×Ñ˜V h ZÔ0Ü“	ˆØ×Ñ˜F X¨xÐ$8Ô9Ø×Ñ˜Ô&Ø×Ñ˜Ô'Ø×Ñ˜EÖ)r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]     s   € ÷ 'ñ ' dñ 'r   c                ó–   € \        4       pV P                  VR4       V P                  V\        4       4       V P                  VR4       R# )úN
An instance of L{Headers} does not compare equal to other unrelated
objects.
re   Nr   ©r   rÉ   r‡   rg   s   & r   Útest_otherComparisonÚ&BytesHeadersTests.test_otherComparison  s=   € ô
 ‹IˆØ×Ñ˜A˜rÔ"Ø×Ñ˜Aœv›xÔ(Ø×Ñ˜A˜vÖ&r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]     s   € ÷ 
ñ 
˜4ñ 
r   c           
     ó–   € RpRpRpV P                  \        \        WV./4      4      RVP                  4       : RV: RV: R24       R# )	za
The L{repr} of a L{Headers} instance shows the names and values of all
the headers it contains.
re   rd   ó   bazú	Headers({ú: [ú, ú]})N©r&   Úreprr   Ú
capitalize©r)   ÚfooÚbarÚbazs   &   r   Ú	test_reprÚBytesHeadersTests.test_repr  sU   € ð
 ˆØˆØˆØ×ÑÜ”˜# S˜zÐ*Ó+Ó,Ø˜Ÿ™Ó)Ñ,¨C°©w°b¸¹¸tÐDö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]     r¶   r   c           
     ó–   € RpRpRpV P                  \        \        WV./4      4      RVP                  4       : RV: RV: R24       R# )	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.
re   s   barás   bazárØ   rÙ   rÚ   rÛ   NrÜ   rß   s   &   r   Útest_reprWithRawBytesÚ'BytesHeadersTests.test_reprWithRawBytes  sW   € ð ˆð ˆØˆØ×ÑÜ”˜# S˜zÐ*Ó+Ó,Ø˜Ÿ™Ó)Ñ,¨C°©w°b¸¹¸tÐDö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   -  s   € ÷ 
ñ 
 4ñ 
r   c           
     ó®   € RpRpRp ! R R\         4      pV P                  \        V! WV./4      4      RVP                  4       : RV: RV: R	24       R
# )úz
The L{repr} of an instance of a subclass of L{Headers} uses the name
of the subclass instead of the string C{"Headers"}.
re   rd   r×   c                  ó   € ] tR tRtRtR# )Ú9BytesHeadersTests.test_subclassRepr.<locals>.FunnyHeadersi6  r   N©rC   rD   rE   rF   rH   r   r   r   ÚFunnyHeadersrí   6  ó   † Ûr   rï   úFunnyHeaders({rÙ   rÚ   rÛ   N)r   r&   rÝ   rÞ   )r)   rà   rá   râ   rï   s   &    r   Útest_subclassReprÚ#BytesHeadersTests.test_subclassRepr-  sc   € ð
 ˆØˆØˆô	œ7ô 	ð 	×ÑÜ‘˜s¨# JÐ/Ó0Ó1Ø˜cŸn™nÓ.Ñ1°°S±G¸2¸c¹WÀDÐIö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r]   >  s   € ÷ Eñ E˜4ñ Er   c                óv  € \        4       pVP                  RR.4       VP                  4       pV P                  VP	                  R4      R.4       VP                  RR4       V P                  VP	                  R4      R.4       VP                  RR4       V P                  VP	                  R4      RR.4       R# )ú–
L{Headers.copy} creates a new independent copy of an existing
L{Headers} instance, allowing future modifications without impacts
between the copies.
r   re   rd   r×   N©r   rP   Úcopyr&   rS   r<   ©r)   rh   r@   s   &  r   Ú	test_copyÚBytesHeadersTests.test_copy>  s–   € ô ‹IˆØ	�‰˜ & Ô*Ø�F‰F‹HˆØ×Ñ˜Ÿ™¨Ó1°F°8Ô<Ø	�‰�w Ô'Ø×Ñ˜Ÿ™¨Ó1°F°8Ô<Ø	�‰�w Ô'Ø×Ñ˜Ÿ™¨Ó1°F¸FÐ3CÖDr   r   N)rC   rD   rE   rF   rG   r`   ri   rs   r{   r‚   r‹   r’   r˜   rž   r¥   r¬   r³   rÃ   rÍ   rÓ   rã   rç   rò   rú   rH   r   r   r   r[   r[   k   sq   † ñõOõ<õ
=õIõ<õIõ
Gõ?õ.õ7õ.õ 9õ
õ"*õ'õ
õ
õ"
÷"Eñ Er   r[   c                  ó"  € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR- R. ltR/tR0# )1ÚUnicodeHeadersTestsiN  z;
Tests for L{Headers}, using L{str} arguments for methods.
c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   Ú UnicodeHeadersTests.__annotate__S  s   € ÷ Nñ N¨tñ Nr   c                ó0   € \        V \        \        4       R# r_   )rY   r   r
   r(   s   &r   r`   Ú1UnicodeHeadersTests.test_sanitizeLinearWhitespaceS  s   € ô
 	˜Ô<¼nÖMr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   Z  s   € ÷ 
:ñ 
: $ñ 
:r   c                óª   € \        RR./4      pV P                  VP                  R4      R.4       V P                  VP                  R4      R.4       R# )a  
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á   re   rd   rà   Nrf   rg   s   & r   ri   Ú$UnicodeHeadersTests.test_initializerZ  sK   € ô �U˜U˜GÐ$Ó%ˆØ×Ñ˜Ÿ™¨Ó0°6°(Ô;Ø×Ñ˜Ÿ™¨Ó/°%°Ö9r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   f  s   € ÷ Dñ D Dñ Dr   c                óÒ  € RR.pRR.p\        4       pVP                  RV4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P	                  VP                  R4      V4       V P	                  VP                  R4      V4       R	# )
zp
L{Headers.setRawHeaders} sets the header values for the given
header name to the sequence of strings, encoded.
Úvalue1Úvalue2rm   rn   r.   r   r   ÚTestNro   )r)   rr   ÚrawEncodedValuerh   s   &   r   rs   Ú&UnicodeHeadersTests.test_setRawHeadersf  s³   € ð
 ˜hÐ'ˆØ$ iÐ0ˆÜ‹IˆØ	�‰˜ Ô)Ø�‰˜Ÿ™ GÓ,Ô-Ø�‰˜Ÿ™ GÓ,Ô-Ø�‰˜Ÿ™ FÓ+Ô,Ø�‰˜Ÿ™ FÓ+Ô,Ø×Ñ˜Ÿ™¨Ó0°(Ô;Ø×Ñ˜Ÿ™¨Ó1°?ÖCr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   v  s   € ÷ "ñ " tñ "r   c                óH  € \        4       pV P                  \        4      ;_uu_ 4        VP                  RR.4       RRR4       V P                  \        4      ;_uu_ 4        VP	                  R4       RRR4       R#   + '       g   i     LI; i  + '       g   i     R# ; i)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ÚUnicodeEncodeErrorrP   rq   rg   s   & r   Útest_nameNotEncodableÚ)UnicodeHeadersTests.test_nameNotEncodablev  sq   € ô ‹Iˆð ×ÑÔ1×2Õ2Ø�O‰O˜H u gÔ.÷ 3ð ×ÑÔ1×2Õ2Ø�K‰K˜Ô!÷ 3Ñ2÷ 3×2ú÷ 3×2Ð2ús   ¨A=Á!BÁ=B	ÂB!	c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   …  s   € ÷ Pñ P 4ñ Pr   c                óx  € \        4       pV P                  \        VP                  RR.4       V P                  \        VP                  RR.4       V P                  \        VP                  RR.4       V P                  \        VP                  RR.4       V P                  \        VP                  RR.4       R# )zl
HTTP header names must be tokens, so any names containing non-token
characters raises L{InvalidHeaderName}
ó   ás   valô   Ã¡s   a bzc
dzc	dN)r   r  r   rP   rg   s   & r   Útest_nameNotTokenÚ%UnicodeHeadersTests.test_nameNotToken…  s–   € ô
 ‹Iˆð 	×ÑÔ+¨Q¯_©_¸gÈÀxÔPØ×ÑÔ+¨Q¯_©_¸hÈÈÔQð 	×ÑÔ+¨Q¯_©_¸fÀvÀhÔOØ×ÑÔ+¨Q¯_©_¸fÀvÀhÔOØ×ÑÔ+¨Q¯_©_¸fÀvÀhÖOr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   •  s   € ÷ ,ñ , 4ñ ,r   c                ó  € \        4       pVP                  RR.4       V P                  VP                  R4      4       V P	                  VP                  R4      R.4       V P                  VP                  R4      4       R# )ze
Passing L{str} to any function that takes a header name will encode
said header name as ISO-8859-1.
rá   re   rd   Nro   rg   s   & r   Útest_nameEncodingÚ%UnicodeHeadersTests.test_nameEncoding•  sf   € ô
 ‹Iˆð 	
�‰˜ ˜xÔ(ð 	�‰˜Ÿ™ FÓ+Ô,Ø×Ñ˜Ÿ™¨Ó0°6°(Ô;ð 	�‰˜Ÿ™ EÓ*Ö+r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   ¦  s   € ÷ Kñ K¨dñ Kr   c                óÈ   € \        4       pVP                  RRR.4       V P                  VP                  R4      4       V P	                  VP                  R4      RR.4       R# )zd
Passing L{str} to L{Headers.setRawHeaders} will encode the name as
ISO-8859-1 and values as UTF-8.
Úxr  re   ó   xs   â˜ƒNro   rg   s   & r   Útest_rawHeadersValueEncodingÚ0UnicodeHeadersTests.test_rawHeadersValueEncoding¦  sQ   € ô
 ‹IˆØ	�‰˜˜h¨Ð/Ô0Ø�‰˜Ÿ™ DÓ)Ô*Ø×Ñ˜Ÿ™¨Ó.°À&Ð0IÖJr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   °  s   € ÷ 	Iñ 	I 4ñ 	Ir   c                ó2  € \        4       pVP                  RR4       V P                  VP                  R4      R.4       VP                  RR4       V P                  VP                  R4      RR.4       V P                  VP                  R4      RR.4       R# )rw   r.   ÚlemurÚpandar   rx   ry   Nrz   rg   s   & r   r{   Ú%UnicodeHeadersTests.test_addRawHeader°  s~   € ô ‹IˆØ	�‰�v˜wÔ'Ø×Ñ˜Ÿ™¨Ó0°7°)Ô<Ø	�‰�v˜wÔ'Ø×Ñ˜Ÿ™¨Ó0°7¸GÐ2DÔEØ×Ñ˜Ÿ™¨Ó1°H¸hÐ3GÖHr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   »  s   € ÷ ;ñ ;¨Tñ ;r   c                óV   € V P                  \        4       P                  R4      4       R# )r   r.   Nr€   r(   s   &r   r‚   Ú/UnicodeHeadersTests.test_getRawHeadersNoDefault»  s   € ð
 	×Ñœ'›)×1Ñ1°&Ó9Ö:r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   Â  s   € ÷ 
ñ 
°ñ 
r   c                óF  € \        4       p\        4       pV P                  VP                  RV4      V4       V P                  VP                  RR4      R4       V P	                  VP                  RR.4      R.4       V P	                  VP                  RR.4      R.4       R# )r†   r.   Nr  )r   r‡   rˆ   rS   r&   r‰   s   &  r   r‹   Ú2UnicodeHeadersTests.test_getRawHeadersDefaultValueÂ  sŠ   € ô
 ‹IˆÜ“(ˆØ×Ñ˜QŸ_™_¨V°WÓ=¸wÔGØ×Ñ˜QŸ_™_¨V°TÓ:¸DÔAØ×Ñ˜Ÿ™¨°$°Ó8¸4¸&ÔAØ×ÑØ�O‰O˜F ] OÓ4ØˆOö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   Ñ  s   € ÷ 
Eñ 
E¸Dñ 
Er   c                óä   € \        4       pR.pVP                  RV4       V P                  VP                  RV4      ^ ,          \        4       V P                  VP                  RV4      R.4       R# )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.
r�   r�   Úkeyr9   N)r   rP   r‘   rS   Ústrr&   r‰   s   &  r   r’   Ú>UnicodeHeadersTests.test_getRawHeadersWithDefaultMatchingValueÑ  s]   € ô ‹IˆØ�*ˆØ	�‰˜ Ô(Ø×Ñ˜aŸo™o¨e°WÓ=¸aÕ@Ä#ÔFØ×Ñ˜Ÿ™¨°Ó8¸7¸)ÖDr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   Ý  s   € ÷ 
?ñ 
? Dñ 
?r   c                óP  € \        4       pVP                  RR.4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       R# )r–   r.   r'  r
  r   rx   r   Nr—   rg   s   & r   r˜   Ú&UnicodeHeadersTests.test_getRawHeadersÝ  s‡   € ô
 ‹IˆØ	�‰˜  	Ô*Ø×Ñ˜Ÿ™¨Ó0°7°)Ô<Ø×Ñ˜Ÿ™¨Ó0°7°)Ô<Ø×Ñ˜Ÿ™¨Ó1°H°:Ô>Ø×Ñ˜Ÿ™¨Ó1°H°:Ö>r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   é  s   € ÷ 
.ñ 
. Dñ 
.r   c                ó@  € \        4       pVP                  RR.4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P                  VP                  R4      4       V P                  VP                  R4      4       R# )rœ   r.   r'  r
  r   r   Nr�   rg   s   & r   rž   Ú&UnicodeHeadersTests.test_hasHeaderTrueé  so   € ô
 ‹IˆØ	�‰˜  	Ô*Ø�‰˜Ÿ™ FÓ+Ô,Ø�‰˜Ÿ™ FÓ+Ô,Ø�‰˜Ÿ™ GÓ,Ô-Ø�‰˜Ÿ™ GÓ,Ö-r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   õ  s   € ÷ 6ñ 6 Tñ 6r   c                óV   € V P                  \        4       P                  R4      4       R# )r¢   r.   Nr£   r(   s   &r   r¥   Ú'UnicodeHeadersTests.test_hasHeaderFalseõ  s   € ð
 	×Ñœ›×,Ñ,¨VÓ4Ö5r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   ü  s   € ÷ .ñ . 4ñ .r   c                ó*  € \        4       pVP                  RR.4       V P                  VP                  R4      4       VP	                  R4       V P                  VP                  R4      4       V P                  VP                  R4      4       VP                  RR.4       V P                  VP                  R4      4       VP	                  R4       V P                  VP                  R4      4       V P                  VP                  R4      4       R# )	r©   rà   r'  re   rá   r(  ÚBarrd   Nrª   rg   s   & r   r¬   Ú%UnicodeHeadersTests.test_removeHeaderü  sÉ   € ô ‹Iˆà	�‰˜ ˜yÔ)Ø�‰˜Ÿ™ EÓ*Ô+Ø	�‰�uÔØ×Ñ˜Ÿ™ UÓ+Ô,Ø×Ñ˜Ÿ™ VÓ,Ô-à	�‰˜ ˜yÔ)Ø�‰˜Ÿ™ EÓ*Ô+Ø	�‰�uÔØ×Ñ˜Ÿ™ UÓ+Ô,Ø×Ñ˜Ÿ™ VÓ,Ö-r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ     r¯   r   c                óŽ   € \        4       pVP                  R4       V P                  \        VP	                  4       4      . 4       R# )r±   r.   Nr²   rg   s   & r   r³   Ú0UnicodeHeadersTests.test_removeHeaderDoesntExist  s5   € ô
 ‹IˆØ	�‰�vÔØ×Ñœ˜a×0Ñ0Ó2Ó3°RÖ8r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ     s   € ÷ 
ñ 
 tñ 
r   c                ó  € \        4       pVP                  RR.4       VP                  RR.4       VP                  RR.4       VP                  4        UUu0 uF  w  r#V\        V4      3kK  	  pppV P	                  V0 Rm4       R# u uppi )	r¸   r.   Úlemursr4   zbasic aksljdlk=r/   ÚkjdfdfgdfgnsdN>   r¼   ©r   )s   kjdfdfgdfgnsdr»   r½   r¿   s   &    r   rÃ   Ú)UnicodeHeadersTests.test_getAllRawHeaders  s„   € ô ‹IˆØ	�‰˜  
Ô+Ø	�‰Ð*Ð->Ð,?Ô@Ø	�‰˜¨Ð'8Ô9à01×0BÑ0BÔ0DÔEÑ0D©¨�qœ% ›(“mÑ0Dˆ
ÑEà×ÑØòö	
ùó Fs   ÁBc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   -  s   € ÷ ,ñ ,¨ñ ,r   c                ó2  € \        4       pVP                  RR.4       \        4       pVP                  RR.4       \        4       pVP                  RRR.4       V P                  W4       V P                  W4       V P                  W4       \        4       pVP                  RR.4       \        4       pVP                  RR.4       \        4       pVP                  RRR.4       V P                  W4       V P                  W%4       V P                  W64       R# )rÇ   rà   r(  r'  re   ry   rx   NrÈ   )r)   rÊ   rË   rÌ   Ú
firstBytesÚsecondBytesÚ
thirdBytess   &      r   rÍ   Ú*UnicodeHeadersTests.test_headersComparison-  sö   € ô
 “	ˆØ×Ñ˜E G 9Ô-Ü“ˆØ×Ñ˜U W IÔ.Ü“	ˆØ×Ñ˜E G¨WÐ#5Ô6à×Ñ˜Ô&Ø×Ñ˜Ô'Ø×Ñ˜EÔ)ô “Yˆ
Ø× Ñ  ¨(¨Ô4Ü“iˆØ×!Ñ! &¨8¨*Ô5Ü“Yˆ
Ø× Ñ  ¨(°GÐ)<Ô=à×Ñ˜Ô+Ø×Ñ˜Ô-Ø×Ñ˜Ö+r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   I  s   € ÷ &ñ & dñ &r   c                ó–   € \        4       pV P                  VR4       V P                  V\        4       4       V P                  VR4       R# )rÑ   rà   Nr   rÒ   rg   s   & r   rÓ   Ú(UnicodeHeadersTests.test_otherComparisonI  s=   € ô
 ‹IˆØ×Ñ˜A˜rÔ"Ø×Ñ˜Aœv›xÔ(Ø×Ñ˜A˜uÖ%r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   S  s   € ÷ 
ñ 
˜4ñ 
r   c           
     óÊ   € RpRpRpRpRpRV,           pRV,           pV P                  \        \        WV./4      4      RP                  WEVP	                  R4      4      4       R	# )
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'z'bar\xe2\x98\x83'ÚbzHeaders({{{}: [{}, {!r}]}})Úutf8N)r&   rÝ   r   r   r'   )r)   rà   rá   râ   Ú
fooEncodedÚ
barEncodeds   &     r   rã   ÚUnicodeHeadersTests.test_reprS  so   € ð ˆØˆØˆØˆ
Ø+ˆ
Ø˜:Õ%ˆ
Ø˜:Õ%ˆ
Ø×ÑÜ”˜# S˜zÐ*Ó+Ó,Ø)×0Ñ0Ø¨¯
©
°6Ó(:óö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   g  s   € ÷ 
ñ 
 4ñ 
r   c                ó¸   € RpRpRpRpRp ! R R\         4      pV P                  \        V! WV./4      4      RV: R	V: R
VP                  R4      : R24       R# )rë   rà   rV  râ   zb'Foo'zb'bar\xe2\x98\x83'c                  ó   € ] tR tRtRtR# )Ú;UnicodeHeadersTests.test_subclassRepr.<locals>.FunnyHeadersir  r   Nrî   r   r   r   rï   r_  r  rð   r   rï   rñ   rÙ   rÚ   rX  rÛ   N)r   r&   rÝ   r'   )r)   rà   rá   râ   rY  rZ  rï   s   &      r   rò   Ú%UnicodeHeadersTests.test_subclassReprg  sb   € ð
 ˆØˆØˆØˆ
Ø,ˆ
ô	œ7ô 	ð 	×ÑÜ‘˜s¨# JÐ/Ó0Ô1ã›: s§z¡z°&Ö'9ð;ö	
r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rÿ   {  s   € ÷ Qñ Q˜4ñ Qr   c                óD  € \        4       pVP                  RR.4       VP                  4       pV P                  VP	                  R4      R.4       V P                  VP	                  R4      R.4       VP                  RR4       V P                  VP	                  R4      R.4       V P                  VP	                  R4      R.4       VP                  RR4       V P                  VP	                  R4      RR.4       V P                  VP	                  R4      RR.4       R	# )
rö   r.   u   fooâ˜ƒr   s   fooâ˜ƒrá   r
  r×   rd   Nr÷   rù   s   &  r   rú   ÚUnicodeHeadersTests.test_copy{  sù   € ô ‹IˆØ	�‰˜  Ô.Ø�F‰F‹Hˆð 	×Ñ˜Ÿ™¨Ó0°;°-Ô@Ø×Ñ˜Ÿ™¨Ó1Ð4FÐ3GÔHð 	
�‰�v˜uÔ%ð 	×Ñ˜Ÿ™¨Ó0°;°-Ô@Ø×Ñ˜Ÿ™¨Ó1Ð4FÐ3GÔHð 	
�‰�v˜vÔ&ð 	×Ñ˜Ÿ™¨Ó0°;ÀÐ2FÔGØ×Ñ˜Ÿ™¨Ó1Ð4FÈÐ3OÖPr   r   N)rC   rD   rE   rF   rG   r`   ri   rs   r  r  r  r#  r{   r‚   r‹   r’   r˜   rž   r¥   r¬   r³   rÃ   rÍ   rÓ   rã   rò   rú   rH   r   r   r   rý   rý   N  s‚   † ñõNõ
:õDõ "õPõ ,õ"Kõ	Iõ;õ
õ
Eõ
?õ
.õ6õ.õ$9õ
õ,,õ8&õ
õ(
÷(Qñ Qr   rý   c                  ó2   € ] tR tRtRtR R ltR R ltRtR# )	ÚMixedHeadersTestsi˜  za
Tests for L{Headers}, mixing L{bytes} and L{str} arguments for methods
where that is permitted.
c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   ÚMixedHeadersTests.__annotate__ž  s   € ÷ 	<ñ 	< 4ñ 	<r   c                óê   € \        4       pVP                  RR4       VP                  RR4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       R# )z<
L{Headers.addRawHeader} accepts mixed L{str} and L{bytes}.
ó   bytesr3  ó   Bytesó   strÚStrrM   Nrz   rg   s   & r   r{   Ú#MixedHeadersTests.test_addRawHeaderž  s]   € ô ‹IˆØ	�‰�x Ô'Ø	�‰�u˜hÔ'à×Ñ˜Ÿ™¨Ó2°V°HÔ=Ø×Ñ˜Ÿ™¨Ó/°'°Ö;r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   rg  ©  s   € ÷ Nñ N Dñ Nr   c                óÊ  € \        4       pVP                  RR.4       VP                  RR.4       VP                  RRR.4       VP                  RRR.4       V P                  VP                  R4      R.4       V P                  VP                  R4      R.4       V P                  VP                  R4      RR.4       V P                  VP                  R	4      R
R.4       R# )z=
L{Headers.setRawHeaders} accepts mixed L{str} and L{bytes}.
ri  r3  z	mixed-strs   mixed-bytesrj  rl  z	Mixed-StrrM   s   Mixed-Bytesrk  Nr—   rg   s   & r   rs   Ú$MixedHeadersTests.test_setRawHeaders©  sÃ   € ô ‹IˆØ	�‰˜ 8 *Ô-Ø	�‰˜ ˜wÔ'Ø	�‰˜ h°Ð%6Ô7Ø	�‰˜¨°Ð(9Ô:à×Ñ˜Ÿ™¨Ó2°X°JÔ?Ø×Ñ˜Ÿ™¨Ó/°%°Ô9Ø×Ñ˜Ÿ™¨Ó5¸ÀÐ7GÔHØ×Ñ˜Ÿ™¨Ó8¸6À8Ð:LÖMr   r   N)rC   rD   rE   rF   rG   r{   rs   rH   r   r   r   re  re  ˜  s   † ñõ
	<÷Nñ Nr   re  N)rG   Ú
__future__r   Útypingr   Útwisted.trial.unittestr   r   Útwisted.web.http_headersr   r   r   Útwisted.web.test.requesthelperr	   r
   r   r   rY   r[   rý   re  r   r   r   Ú<module>rv     sj   ðñõ #å ç @ß MÑ M÷ñ ô0
Ð*ô 0
õf IôF`E˜ô `EôFGQ˜(ô GQôT
N˜ö Nr   