
    7                        S SK Jr  S SKrS SKrS SKJr  S SKJr   " S S5      r " S S5      r	\R                  " 5       SS	 j5       r " S
 S5      rg)    )annotationsNHTTPHeaderDict)RecentlyUsedContainerc                  n    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSrg)TestLRUContainer   c                2   [        S5      n[        S5       H  n[        U5      X'   M     [        U5      S:X  d   e[        S5       H  nX   [        U5      :X  a  M   e   [        WS-   5      XS-   '   [        U5      S:X  d   eSU;  d   eUS-   U;   d   eg )N      r   )	Containerrangestrlenselfdis      <platform/gsutil/third_party/urllib3/test/test_collections.pytest_maxsizeTestLRUContainer.test_maxsize   s    !*1qAq6AD  1v{{qA43q6>!>  q1u:a%1v{{zzA!||    c                F    [        S5      nSUS'   [        U5      S:X  d   eg )Nr   r   )r   r   r   r   s     r   test_maxsize_0TestLRUContainer.test_maxsize_0   s$    !*1!1v{{r   c                    [        S5      n[        S5       H  n[        U5      X'   M     [        S5       H  nUR                  S5        M     SUS'   [	        UR
                  R                  5       5      / SQ:X  d   eg )Nr   r   5)         r   r   )r   r   r   getlist
_containerkeysr   s      r   test_expireTestLRUContainer.test_expire"   sl    !*1qAq6AD  qAEE!H  ! ALL%%'(O;;;r   c                    [        S5      n[        S5       H  nX!S'   M	     [        UR                  R	                  5       5      S/:X  d   e[        U5      S:X  d   eg )Nr   
   foor   )r   r   r#   r$   r%   r   r   s      r   test_same_keyTestLRUContainer.test_same_key1   sT    !*1rAeH  ALL%%'(UG3331v{{r   c                   [        S5      n[        S5       H  nSX'   M	     [        UR                  R	                  5       5      / SQ:X  d   e/ SQnU H  nX     M	     [        UR                  R	                  5       5      U:X  d   eg )Nr   r)   T)r            	   )r/   r0   r.   r1   r   )r   r   r#   r$   r%   )r   r   r   	new_orderks        r   test_access_ordering%TestLRUContainer.test_access_ordering:   sx    "+A,rAAD  ALL%%'(O;;;#	AD  ALL%%'(I555r   c                    [        S5      n[        S5       H  nSX'   M	     US	 SU;  d   eUR                  S5        SU;  d   eUR                  SS 5        g )Nr   Tr   r   )r   r   popr   s      r   test_deleteTestLRUContainer.test_deleteI   sY    "+A,qAAD  aDzz	azz	ar   c                H   [        S5      n[        S5       H  nSX'   M	     UR                  S5      nUSL d   eUR                  S5      nUb   eUR                  SS5      nUS:X  d   e[        R                  " [
        5         US     S S S 5        g ! , (       d  f       g = f)Nr   Tr!   *   )r   r   r"   pytestraisesKeyError)r   r   r   rs       r   test_getTestLRUContainer.test_getW   s    (1!qAAD  EE!HDyyEE!HyyEE!RLBww]]8$aD %$$s   B
B!c                  ^ / mSU4S jjn[        SUS9n[        S5       H  nX2U'   M	     [        UR                  R	                  5       5      [        [        S5      5      :X  d   eT/ :X  d   eSUS'   [        UR                  R	                  5       5      [        [        SS5      5      :X  d   eTS/:X  d   eUS	 TSS/:X  d   eUR                  5         T/ SQ:X  d   eg )	Nc                (   > TR                  U 5        g N)append)argevicted_itemss    r   dispose_func4TestLRUContainer.test_disposal.<locals>.dispose_funcl   s      %r   r   )rH   r   r.   r   )r   r   r   r    r!   r   )rF   intreturnNone)r   r   r#   r$   r%   clear)r   rH   r   r   rG   s       @r   test_disposalTestLRUContainer.test_disposali   s    #%	& "+1<!HqAaD ALL%%'(DqN:::"""!ALL%%'(Dq!,====###aDA&&&		 2222r   c                    [        5       n[        R                  " [        5         UR	                  5         S S S 5        g ! , (       d  f       g = frD   )r   r<   r=   NotImplementedError__iter__r   s     r   	test_iterTestLRUContainer.test_iter   s+    !*]]./JJL 0//s	   ?
A NrK   rL   )__name__
__module____qualname____firstlineno__r   r   r&   r+   r4   r8   r@   rN   rS   __static_attributes__rU   r   r   r   r      s/    "
<6$3.r   r   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
NonMappingHeaderContainer   c                H    0 U l         U R                   R                  U5        g rD   )_dataupdate)r   kwargss     r   __init__"NonMappingHeaderContainer.__init__   s    


&!r   c                ,    [        U R                  5      $ rD   )iterr`   )r   s    r   r%   NonMappingHeaderContainer.keys   s    DJJr   c                     U R                   U   $ rD   r`   )r   keys     r   __getitem__%NonMappingHeaderContainer.__getitem__   s    zz#r   ri   N)rb   r   rK   rL   )rK   ztyping.Iterator[str])rj   r   rK   r   )rW   rX   rY   rZ   rc   r%   rk   r[   rU   r   r   r]   r]      s    " r   r]   c                 <    [        SS9n U R                  SS5        U $ )Nr*   Cookiecookiebar)r   add)header_dicts    r   r   r      s      .KOOHe$r   c                     \ rS rSrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jr	S+S jr
S+S	 jrS+S
 jrS+S jrS+S jrS+S jrS+S jrS+S jrS+S jrS+S jr\R*                  R-                  SSS/5            S,S j5       rS+S jrS+S jrS+S jrS+S jrS+S jrS+S jrS+S jrS+S jrS+S jr S+S jr!S+S  jr"S+S! jr#S+S" jr$S+S# jr%S+S$ jr&S+S% jr'S+S& jr(S+S' jr)S(r*g))-TestHTTPHeaderDict   c                N    [        SSSSS9n[        U5      S:X  d   eSU;   d   eg N1234)abcdefghr!   r}   )r   r   r   hs     r   test_create_from_kwargs*TestHTTPHeaderDict.test_create_from_kwargs   s.    cccc:1v{{qyyr   c                    [        SS9nUR                  SS5      S:X  d   eUR                  SS5      S:X  d   eUR                  S5      S:X  d   eUS   S:X  d   eUS   S:X  d   eg )	Nry   )aAr{   brz   c )r   
setdefaultr   s     r   test_setdefault"TestHTTPHeaderDict.test_setdefault   su    S!||C%,,,||C%,,,||C B&&&v||v}}r   c           	     `    [        [        SSSSS95      n[        U5      S:X  d   eSU;   d   eg rx   )r   dictr   r   s     r   test_create_from_dict(TestHTTPHeaderDict.test_create_from_dict   s3    43333?@1v{{qyyr   c                r    Sn[        S U 5       5      n[        U5      [        [        U5      5      :X  d   eg )Nurllib3ontherocksc              3  .   #    U  H  oUS -  4v   M     g7f)r   NrU   ).0r   s     r   	<genexpr>?TestHTTPHeaderDict.test_create_from_iterator.<locals>.<genexpr>   s     7w!q1u:ws   )r   r   set)r   teststrr   s      r   test_create_from_iterator,TestHTTPHeaderDict.test_create_from_iterator   s2    %7w771vS\****r   c                    / SQn[        U5      n[        U5      S:X  d   eSU;   d   eUR                  S5      n[        U5      S:X  d   eUS   S:X  d   eUS   S:X  d   eg 	N))r}   r   )r~   B)rp   C)rp   D)rp   Er    r}   rp   r   r   r   r   r   getlist)r   headersr   clists       r   test_create_from_list(TestHTTPHeaderDict.test_create_from_list   sq    
 7#1v{{qyy		(#5zQQx3RyCr   c                    / SQn[        U5      n[        U5      n[        U5      S:X  d   eSU;   d   eUR                  S5      n[        U5      S:X  d   eUS   S:X  d   eUS   S:X  d   eX2Ld   eX2:X  d   eg r   r   )r   r   orgr   r   s        r   test_create_from_headerdict.TestHTTPHeaderDict.test_create_from_headerdict   s    
 W%31v{{qyy		(#5zQQx3RyC||xxr   c                h    SUS'   SUS'   US   S:X  d   eSUS'   UR                  S5      S/:X  d   eg )Nr*   ro   rq   s   Cookierp   with, comma)r   r   s     r   test_setitemTestHTTPHeaderDict.test_setitem   sJ    ( ){e####(yy"}o555r   c                    UR                  [        SS95        US   S:X  d   eUR                  [        SS95        UR                  S5      S/:X  d   eg )Nr*   rn   rp   r   rp   )ra   r   r   r   s     r   test_updateTestHTTPHeaderDict.test_update   sO    	U#${e###	]+,yy"}o555r   c                *    US	 SU;  d   eSU;  d   eg )Nrp   COOKIErU   r   s     r   test_delitemTestHTTPHeaderDict.test_delitem   s%    hKq   q   r   c                p    UR                  SS5        UR                  S5      / SQ:X  d   eUS   S:X  d   eg )Nr   asdfrp   r*   rq   r   foo, bar, asdfrr   r   r   s     r   test_add_well_known_multiheader2TestHTTPHeaderDict.test_add_well_known_multiheader   s;    	hyy"&<<<<{....r   c                    UR                  SS5        UR                  SS5        UR                  SS5        UR                  S5      / SQ:X  d   eUS   S:X  d   eg )Nrq   r*   s   BARBarr   r   r   r   r   s     r   $test_add_comma_separated_multiheader7TestHTTPHeaderDict.test_add_comma_separated_multiheader   sY    	eU 	
fe	eVyy#9999x++++r   c                @    UR                  / SQ5        US   S:X  d   eg )N))
set-cookie100)r   200)r   300r   z100, 200, 300)extendr   s     r   test_extend_from_list(TestHTTPHeaderDict.test_extend_from_list   s!    	VW/111r   c                    UR                  [        SS9SS9  US   S:X  d   eUS   S:X  d   eUR                  SS5        UR                  S5      / S	Q:X  d   eg )
Nr   r   r   )r   rp   r   r   r   )r*   rq   r   r   )r   r   rr   r   r   s     r   test_extend_from_dict(TestHTTPHeaderDict.test_extend_from_dict   s`    	V$.{....v	h&yy"&KKKKr   c                    [        SSS9nUR                  U5        US   S:X  d   eUS   S:X  d   e[        U5      S:X  d   eg Nr*   foofoo)ro   erp   zfoo, bar, foor   r   )r]   r   r   r   r   r   s      r   test_extend_from_container-TestHTTPHeaderDict.test_extend_from_container  sM    %Uh?	{o---v!!!1v{{r   c                   SUS'   UR                  SS5        [        UR                  5       5      / SQ:X  d   eUR                  SSSS9  / SQn[        UR                  5       5      U:X  d   e[        UR                  5       R                  5       5      U:X  d   e[	        5       nUR                  U5        [        UR                  5       5      U:X  d   eg )	Nhelloother-headerworld)ro   r*   ro   rq   r   r   )r   r   !T)combine)r   r   r   )r   zworld, !)rr   r#   itemscopyr   r   )r   r   expected_results
other_dicts       r   test_header_repeat%TestHTTPHeaderDict.test_header_repeat	  s    #.	ng&AGGI #
 
 	
 
 	
nc40
 AGGI"2222AFFHNN$%)9999#%
!J$$&'+;;;;r   c                    [        SSS9nUR                  U5        US   S:X  d   eUS   S:X  d   e[        U5      S:X  d   eg r   )r   r   r   r   s      r   test_extend_from_headerdict.TestHTTPHeaderDict.test_extend_from_headerdict%  sM    %84	{o---v!!!1v{{r   args)r   r   )r   r   r    r!   r   c                    [         R                  " [        SS9   UR                  " U6   S S S 5        g ! , (       d  f       g = f)Nz/extend\(\) takes at most 1 positional argumentsmatch)r<   r=   	TypeErrorr   )r   r   r   s      r   2test_extend_with_wrong_number_of_args_is_typeerrorETestHTTPHeaderDict.test_extend_with_wrong_number_of_args_is_typeerror,  s3     ]]O
 HHdO
 
 
s	   3
Ac                >    UR                  5       nXLd   eX:X  d   eg rD   )r   r   s      r   	test_copyTestHTTPHeaderDict.test_copy5  s     FFHzzvvr   c                    UR                  S5      SS/:X  d   eUR                  S5      SS/:X  d   eUR                  S5      / :X  d   eUR                  SS5        UR                  S5      S/:X  d   eg )Nrp   r*   rq   ro   r   r   )r   rr   r   s     r   test_getlistTestHTTPHeaderDict.test_getlist:  st    yy"uen444yy"uen444yy~###	c6yy~&)))r   c                b    UR                  S5      [        U5      R                  S5      :X  d   eg Nrp   )r   r   r   s     r   test_getlist_after_copy*TestHTTPHeaderDict.test_getlist_after_copyA  s)    yy"nQ&7&?&?&IIIIr   c                h    [        SS9n[        SS9nS/nX:X  d   eX:X  d   eX:X  d   eUS:w  d   eg Nfoo, barr   )rp   r   r   r   r]   r   r   r   r   r   s        r   
test_equalTestHTTPHeaderDict.test_equalD  sD    *-%Z8#$vvvvvvAvvr   c                h    [        SS9n[        SS9nS/nX:w  a   eX:w  a   eX:w  a   eUS:w  d   eg r   r   r   s        r   test_not_equal!TestHTTPHeaderDict.test_not_equalM  sG    *-%Z8#$F|F|F|Avvr   c                   SnX   nUR                  U5      nX4:X  d   eX!;  d   e[        R                  " [        5         UR                  U5        S S S 5        [	        5       nXQR                  X%5      L d   eg ! , (       d  f       N.= f)Nro   )r7   r<   r=   r>   object)r   r   rj   r   r   dummys         r   test_popTestHTTPHeaderDict.test_popV  so    FEE#Jvv||]]8$EE#J %c)))) %$s    A::
Bc                X    UR                  S5        SU;  d   eUR                  S5        g r   )discardr   s     r   test_discardTestHTTPHeaderDict.test_discarda  s(    			(q   			(r   c                    [        U5      S:X  d   eUR                  SS5        UR                  SS5        [        U5      S:X  d   eg )Nr   rp   blar   r*   r   )r   rr   r   s     r   test_lenTestHTTPHeaderDict.test_lenf  s>    1v{{	h	fe1v{{r   c                *    Sn[        U5      U:X  d   eg )Nz&HTTPHeaderDict({'Cookie': 'foo, bar'}))repr)r   r   reps      r   	test_reprTestHTTPHeaderDict.test_reprm  s    6Aw#~~r   c                    UR                  5       n[        U5      S:X  d   e[        U5      SS/:X  d   eSU;   d   eSU;   d   eSU;  d   eSU;  d   eSU;  d   eSU;  d   eg )Nr   r   r   )zX-Some-Headerr*   )ro   not_present)ro   r   ro   )r   r   r#   )r   r   r   s      r   
test_itemsTestHTTPHeaderDict.test_itemsq  s    	5zQE{
 
 	
 
 !E))) E)))'u444(555E)))u$$$r   c                    SSSS.n[        [        U5      R                  5       5      nX#:X  d   eU[        [        U5      5      :X  d   eg )N0z
text/plainzHypercorn/1.2.3)zContent-LengthzContent-typeServer)r   r   r   )r   r   hdictr   s       r   test_dict_conversion'TestHTTPHeaderDict.test_dict_conversion  sP     "('

 &,,./zz^E23333r   c                   [         R                  " [        5         SUS'   S S S 5        [         R                  " [        5         UR                  SS5        S S S 5        [         R                  " [        5         US	 S S S 5        [         R                  " [        5         [	        SS05        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nv= f! , (       d  f       Na= f! , (       d  f       g = f)Nr   r    r|   )r<   r=   	Exceptionrr   r   r   s     r   test_string_enforcement*TestHTTPHeaderDict.test_string_enforcement  s     ]]9%AaD &]]9%EE!SM &]]9%! &]]9%Aq6" &% &%%%%%%%s/   B5C8CC(5
C
C
C%(
C6c                    SU;   d   eSU;   d   eSU;  d   e[        5       nSS/UR                  U'   X!;  d   eX!R                  ;   d   eg)a	  
Test:

HTTPHeaderDict.__contains__ returns True
  - for matched string objects
  - for case-similar string objects
HTTPHeaderDict.__contains__ returns False
  - for non-similar strings
  - for non-strings, even if they are keys
    in the underlying datastructure
rp   CoOkIezNot a cookiesomestringsN)r  r$   )r   r   markers      r   test_dunder_contains'TestHTTPHeaderDict.test_dunder_contains  s^     1}}1}}Q&&& &	2V%%%r   c                t    SS0nX-  nU[        SS05      :X  d   eUSS0:X  d   eU[        SS05      :X  d   eg )Nro   tim-tamfoo, bar, tim-tamr   r   r   r   to_mergeresults       r   
test_unionTestHTTPHeaderDict.test_union  sW    i(3F(GHHHHHi0000NHj#9::::r   c                t    SS0nX!-  nU[        SS05      :X  d   eUSS0:X  d   eU[        SS05      :X  d   eg )Nro   r+  ztim-tam, foo, barr   r   r-  s       r   test_union_rhs!TestHTTPHeaderDict.test_union_rhs  sW    i(3F(GHHHHHi0000NHj#9::::r   c                :    SS0nX-  nU[        SS05      :X  d   eg )Nro   r+  r,  r   )r   r   r.  s      r   test_inplace_union%TestHTTPHeaderDict.test_inplace_union  s,    i(	NH.A#BCCCCr   c                    [         R                  " [        SS9   US-    S S S 5        [         R                  " [        SS9   SU-    S S S 5        g ! , (       d  f       N6= f! , (       d  f       g = f)Nzunsupported operand type.*'int'r   r;   z!unsupported operand type.*'float'gQ	@r<   r=   r   r   s     r    test_union_with_unsupported_type3TestHTTPHeaderDict.test_union_with_unsupported_type  sN    ]]9,MNF O]]9,OP1H QP ONPPs   AA!
A!
A/c                t    [         R                  " [        SS9   US -  nS S S 5        g ! , (       d  f       g = f)Nz$unsupported operand type.*'NoneType'r   r9  r   s     r   (test_inplace_union_with_unsupported_type;TestHTTPHeaderDict.test_inplace_union_with_unsupported_type  s'    ]]9,RSIA TSSs   )
7rU   NrV   )r   r   rK   rL   )r   r   r   ztuple[int, ...]rK   rL   )+rW   rX   rY   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   markparametrizer   r   r   r   r   r  r  r
  r  r  r  r  r!  r(  r0  r3  r6  r:  r=  r[   rU   r   r   ru   ru      s    

+
  &66!
/
,2L<8 [[Vfo%>?'6	 @
*J	*
%	4
#&*;;D
r   ru   )rK   r   )
__future__r   typingr<   urllib3._collectionsr   r   r   r   r]   fixturer   ru   rU   r   r   <module>rE     sR    "   / Cy yx	 	  l lr   