
    7                        d dl mZ d dlZd dlZd dlmZ d dlmZ  G d d      Z G d d      Z	 ej                         dd	       Z G d
 d      Zy)    )annotationsNHTTPHeaderDict)RecentlyUsedContainerc                  T    e 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y
)TestLRUContainerc                "   t        d      }t        d      D ]  }t        |      ||<    t        |      dk(  sJ t        d      D ]  }||   t        |      k(  rJ  t        dz         ||dz   <   t        |      dk(  sJ d|vsJ |dz   |v sJ y )N      r   )	Containerrangestrlenselfdis      <platform/gsutil/third_party/urllib3/test/test_collections.pytest_maxsizezTestLRUContainer.test_maxsize   s    !*1qAq6AaD  1v{{qAQ43q6>!>  q1u:!a%1v{{zzA!||    c                D    t        d      }d|d<   t        |      dk(  sJ y )Nr   r   )r   r   r   r   s     r   test_maxsize_0zTestLRUContainer.test_maxsize_0   s$    !*1!1v{{r   c                    t        d      }t        d      D ]  }t        |      ||<    t        d      D ]  }|j                  d        d|d<   t	        |j
                  j                               g dk(  sJ y )Nr
   r   5)         r   r
   )r   r   r   getlist
_containerkeysr   s      r   test_expirezTestLRUContainer.test_expire"   sn    !*1qAq6AaD  qAEE!H  ! ALL%%'(O;;;r   c                    t        d      }t        d      D ]  }||d<   	 t        |j                  j	                               dgk(  sJ t        |      dk(  sJ y )Nr
   
   foor   )r   r   r    r!   r"   r   r   s      r   test_same_keyzTestLRUContainer.test_same_key1   sV    !*1rAAeH  ALL%%'(UG3331v{{r   c                   t        d      }t        d      D ]  }d||<   	 t        |j                  j	                               g dk(  sJ g d}|D ]  }||    	 t        |j                  j	                               |k(  sJ y )Nr
   r%   T)r
            	   )r*   r+   r)   r,   r
   )r   r   r    r!   r"   )r   r   r   	new_orderks        r   test_access_orderingz%TestLRUContainer.test_access_ordering:   s|    "+A,rAAaD  ALL%%'(O;;;#	AaD  ALL%%'(I555r   c                    t        d      }t        d      D ]  }d||<   	 |d= d|vsJ |j                  d       d|vsJ |j                  dd        y )Nr
   Tr   r   )r   r   popr   s      r   test_deletezTestLRUContainer.test_deleteI   s[    "+A,qAAaD  aDzz	azz	ar   c                4   t        d      }t        d      D ]  }d||<   	 |j                  d      }|du sJ |j                  d      }|J |j                  dd      }|dk(  sJ t        j                  t
              5  |d    d d d        y # 1 sw Y   y xY w)Nr
   Tr   *   )r   r   r   pytestraisesKeyError)r   r   r   rs       r   test_getzTestLRUContainer.test_getW   s    (1!qAAaD  EE!HDyyEE!HyyEE!RLBww]]8$aD %$$s   ?BBc                   g dfd}t        d|      }t        d      D ]  }|||<   	 t        |j                  j	                               t        t        d            k(  sJ g k(  sJ d|d<   t        |j                  j	                               t        t        dd            k(  sJ dgk(  sJ |d= ddgk(  sJ |j                          g dk(  sJ y )	Nc                (    j                  |        y N)append)argevicted_itemss    r   dispose_funcz4TestLRUContainer.test_disposal.<locals>.dispose_funcl   s      %r   r
   )r@   r   r)   r   )r   r   r   r   r   r
   )r>   intreturnNone)r   r   r    r!   r"   clear)r   r@   r   r   r?   s       @r   test_disposalzTestLRUContainer.test_disposali   s    #%	& "+1<!HqAAaD ALL%%'(DqN:::"""!ALL%%'(Dq!,====###aDA&&&		 2222r   c                    t               }t        j                  t              5  |j	                          d d d        y # 1 sw Y   y xY wr<   )r   r5   r6   NotImplementedError__iter__r   s     r   	test_iterzTestLRUContainer.test_iter   s+    !*]]./JJL 0//s	   >ANrB   rC   )__name__
__module____qualname__r   r   r#   r'   r/   r2   r9   rE   rI    r   r   r   r      s/    "
<6$3.r   r   c                  $    e Zd ZddZddZddZy)NonMappingHeaderContainerc                H    i | _         | j                   j                  |       y r<   )_dataupdate)r   kwargss     r   __init__z"NonMappingHeaderContainer.__init__   s    


&!r   c                ,    t        | j                        S r<   )iterrR   )r   s    r   r"   zNonMappingHeaderContainer.keys   s    DJJr   c                     | j                   |   S r<   )rR   )r   keys     r   __getitem__z%NonMappingHeaderContainer.__getitem__   s    zz#r   N)rT   r   rB   rC   )rB   ztyping.Iterator[str])rY   r   rB   r   )rK   rL   rM   rU   r"   rZ   rN   r   r   rP   rP      s    " r   rP   c                 B    t        d      } | j                  dd       | S )Nr&   Cookiecookiebar)r   add)header_dicts    r   r   r      s      .KOOHe$r   c                  r   e 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ej(                  j+                  dddg      	 	 	 	 	 	 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(y')+TestHTTPHeaderDictc                N    t        dddd      }t        |      dk(  sJ d|v sJ y N1234)abcdefghr   rj   )r   r   r   hs     r   test_create_from_kwargsz*TestHTTPHeaderDict.test_create_from_kwargs   s.    cccc:1v{{qyyr   c                    t        d      }|j                  dd      dk(  sJ |j                  dd      dk(  sJ |j                  d      dk(  sJ |d   dk(  sJ |d   dk(  sJ y )	Nrf   )aArh   brg   c )r   
setdefaultrn   s     r   test_setdefaultz"TestHTTPHeaderDict.test_setdefault   su    S!||C%,,,||C%,,,||C B&&&v||v}}r   c                `    t        t        dddd            }t        |      dk(  sJ d|v sJ y re   )r   dictr   rn   s     r   test_create_from_dictz(TestHTTPHeaderDict.test_create_from_dict   s3    43333?@1v{{qyyr   c                p    d}t        d |D              }t        |      t        t        |            k(  sJ y )Nurllib3ontherocksc              3  *   K   | ]  }||d z  f  yw)r
   NrN   ).0ru   s     r   	<genexpr>z?TestHTTPHeaderDict.test_create_from_iterator.<locals>.<genexpr>   s     7w!Aq1u:ws   )r   r   set)r   teststrro   s      r   test_create_from_iteratorz,TestHTTPHeaderDict.test_create_from_iterator   s2    %7w771vS\****r   c                    g d}t        |      }t        |      dk(  sJ d|v sJ |j                  d      }t        |      dk(  sJ |d   dk(  sJ |d   dk(  sJ y 	N))rj   rs   )rk   B)r^   C)r^   D)r^   Er   rj   r^   r   r   r   r   r   getlist)r   headersro   clists       r   test_create_from_listz(TestHTTPHeaderDict.test_create_from_list   sq    
 7#1v{{qyy		(#5zQQx3RyCr   c                    g d}t        |      }t        |      }t        |      dk(  sJ d|v sJ |j                  d      }t        |      dk(  sJ |d   dk(  sJ |d   dk(  sJ ||usJ ||k(  sJ y r   r   )r   r   orgro   r   s        r   test_create_from_headerdictz.TestHTTPHeaderDict.test_create_from_headerdict   s    
 W%31v{{qyy		(#5zQQx3RyC||Cxxr   c                d    d|d<   d|d<   |d   dk(  sJ d|d<   |j                  d      dgk(  sJ y )Nr&   r]   r_   s   Cookier^   with, comma)r   r   s     r   test_setitemzTestHTTPHeaderDict.test_setitem   sJ    ( ){e####(yy"}o555r   c                    |j                  t        d             |d   dk(  sJ |j                  t        d             |j                  d      dgk(  sJ y )Nr&   r\   r^   r   r^   )rS   rz   r   r   s     r   test_updatezTestHTTPHeaderDict.test_update   sO    	U#${e###	]+,yy"}o555r   c                "    |d= d|vsJ d|vsJ y )Nr^   COOKIErN   r   s     r   test_delitemzTestHTTPHeaderDict.test_delitem   s%    hKq   q   r   c                l    |j                  dd       |j                  d      g dk(  sJ |d   dk(  sJ y )Nr   asdfr^   r&   r_   r   foo, bar, asdfr`   r   r   s     r   test_add_well_known_multiheaderz2TestHTTPHeaderDict.test_add_well_known_multiheader   s;    	hyy"&<<<<{....r   c                    |j                  dd       |j                  dd       |j                  dd       |j                  d      g dk(  sJ |d   dk(  sJ y )Nr_   r&   s   BARBarr   r   r   r   r   s     r   $test_add_comma_separated_multiheaderz7TestHTTPHeaderDict.test_add_comma_separated_multiheader   sY    	eU 	
fe	eVyy#9999x++++r   c                >    |j                  g d       |d   dk(  sJ y )N))
set-cookie100)r   200)r   300r   z100, 200, 300)extendr   s     r   test_extend_from_listz(TestHTTPHeaderDict.test_extend_from_list   s!    	VW/111r   c                    |j                  t        d      d       |d   dk(  sJ |d   dk(  sJ |j                  dd       |j                  d      g d	k(  sJ y )
Nr   r   r   )rt   r^   r   rt   r   )r&   r_   r   r   )r   rz   r`   r   r   s     r   test_extend_from_dictz(TestHTTPHeaderDict.test_extend_from_dict   s`    	V$.{....v	h&yy"&KKKKr   c                    t        dd      }|j                  |       |d   dk(  sJ |d   dk(  sJ t        |      dk(  sJ y Nr&   foofoo)r]   er^   zfoo, bar, foor   r   )rP   r   r   r   r   ro   s      r   test_extend_from_containerz-TestHTTPHeaderDict.test_extend_from_container  sM    %Uh?	{o---v!!!1v{{r   c                   d|d<   |j                  dd       t        |j                               g dk(  sJ |j                  ddd       g d}t        |j                               |k(  sJ t        |j                         j                               |k(  sJ t	               }|j                  |       t        |j                               |k(  sJ y )	Nhelloother-headerworld)r]   r&   r]   r_   r   r   )r   r   !T)combine)r   r   r   )r   zworld, !)r`   r    itemscopyr   r   )r   r   expected_results
other_dicts       r   test_header_repeatz%TestHTTPHeaderDict.test_header_repeat	  s    #.	ng&AGGI #
 
 	
 
 	
nc40
 AGGI"2222AFFHNN$%)9999#%
!J$$&'+;;;;r   c                    t        dd      }|j                  |       |d   dk(  sJ |d   dk(  sJ t        |      dk(  sJ y r   )r   r   r   r   s      r   test_extend_from_headerdictz.TestHTTPHeaderDict.test_extend_from_headerdict%  sM    %84	{o---v!!!1v{{r   args)r   r   )r   r   r   r   r
   c                    t        j                  t        d      5   |j                  |  d d d        y # 1 sw Y   y xY w)Nz/extend\(\) takes at most 1 positional argumentsmatch)r5   r6   	TypeErrorr   )r   r   r   s      r   2test_extend_with_wrong_number_of_args_is_typeerrorzETestHTTPHeaderDict.test_extend_with_wrong_number_of_args_is_typeerror,  s5     ]]O
 AHHdO
 
 
s   5>c                >    |j                         }||usJ ||k(  sJ y r<   )r   r   s      r   	test_copyzTestHTTPHeaderDict.test_copy5  s$    FFHzzAvvr   c                    |j                  d      ddgk(  sJ |j                  d      ddgk(  sJ |j                  d      g k(  sJ |j                  dd       |j                  d      dgk(  sJ y )Nr^   r&   r_   r]   rt   r   )r   r`   r   s     r   test_getlistzTestHTTPHeaderDict.test_getlist:  st    yy"uen444yy"uen444yy~###	c6yy~&)))r   c                `    |j                  d      t        |      j                  d      k(  sJ y Nr^   )r   r   r   s     r   test_getlist_after_copyz*TestHTTPHeaderDict.test_getlist_after_copyA  s)    yy"nQ&7&?&?&IIIIr   c                r    t        d      }t        d      }dg}||k(  sJ ||k(  sJ ||k(  sJ |dk7  sJ y Nfoo, barr   )r^   r   r   r   rP   r   r   rt   ru   r   s        r   
test_equalzTestHTTPHeaderDict.test_equalD  sJ    *-%Z8#$AvvAvvAvvAvvr   c                r    t        d      }t        d      }dg}||k7  rJ ||k7  rJ ||k7  rJ |dk7  sJ y r   r   r   s        r   test_not_equalz!TestHTTPHeaderDict.test_not_equalM  sM    *-%Z8#$F|F|F|Avvr   c                   d}||   }|j                  |      }||k(  sJ ||vsJ t        j                  t              5  |j                  |       d d d        t	               }||j                  ||      u sJ y # 1 sw Y   *xY w)Nr]   )r1   r5   r6   r7   object)r   r   rY   rr   rt   dummys         r   test_popzTestHTTPHeaderDict.test_popV  sy    cFEE#JAvv!||]]8$EE#J %c5)))) %$s   A::Bc                T    |j                  d       d|vsJ |j                  d       y r   )discardr   s     r   test_discardzTestHTTPHeaderDict.test_discarda  s(    			(q   			(r   c                    t        |      dk(  sJ |j                  dd       |j                  dd       t        |      dk(  sJ y )Nr   r^   blar   r&   r   )r   r`   r   s     r   test_lenzTestHTTPHeaderDict.test_lenf  s>    1v{{	h	fe1v{{r   c                (    d}t        |      |k(  sJ y )Nz&HTTPHeaderDict({'Cookie': 'foo, bar'}))repr)r   r   reps      r   	test_reprzTestHTTPHeaderDict.test_reprm  s    6Aw#~~r   c                    |j                         }t        |      dk(  sJ t        |      ddgk(  sJ d|v sJ d|v sJ d|vsJ d|vsJ d|vsJ d|vsJ y )Nr   r   r   )zX-Some-Headerr&   )r]   not_present)r]   r   r]   )r   r   r    )r   r   r   s      r   
test_itemszTestHTTPHeaderDict.test_itemsq  s    	5zQE{
 
 	
 
 !E))) E)))'u444(555E)))u$$$r   c                    dddd}t        t        |      j                               }||k(  sJ |t        t        |            k(  sJ y )N0z
text/plainzHypercorn/1.2.3)zContent-LengthzContent-typeServer)rz   r   r   )r   r   hdictro   s       r   test_dict_conversionz'TestHTTPHeaderDict.test_dict_conversion  sR     "('

 &,,./zz^E23333r   c                   t        j                  t              5  d|d<   d d d        t        j                  t              5  |j                  dd       d d d        t        j                  t              5  |d= d d d        t        j                  t              5  t	        ddi       d d d        y # 1 sw Y   xY w# 1 sw Y   jxY w# 1 sw Y   QxY w# 1 sw Y   y xY w)Nr   r   ri   )r5   r6   	Exceptionr`   r   r   s     r   test_string_enforcementz*TestHTTPHeaderDict.test_string_enforcement  s     ]]9%AaD &]]9%EE!SM &]]9%! &]]9%Aq6" &% &%%%%%%%s/   B1B=5C	C1B:=C	CCc                    d|v sJ d|v sJ d|vsJ t               }ddg|j                  |<   ||vsJ ||j                  v sJ y)aQ  
        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
        r^   CoOkIezNot a cookiesomestringsN)r   r!   )r   r   markers      r   test_dunder_containsz'TestHTTPHeaderDict.test_dunder_contains  sb     1}}1}}Q&&& &	2VQ%%%r   c                p    ddi}||z  }|t        ddi      k(  sJ |ddik(  sJ |t        ddi      k(  sJ y )Nr]   tim-tamfoo, bar, tim-tamr   r   r   r   to_mergeresults       r   
test_unionzTestHTTPHeaderDict.test_union  sY    i(X3F(GHHHHHi0000NHj#9::::r   c                p    ddi}||z  }|t        ddi      k(  sJ |ddik(  sJ |t        ddi      k(  sJ y )Nr]   r   ztim-tam, foo, barr   r   r   s       r   test_union_rhsz!TestHTTPHeaderDict.test_union_rhs  sY    i(A3F(GHHHHHi0000NHj#9::::r   c                :    ddi}||z  }|t        ddi      k(  sJ y )Nr]   r   r   r   )r   r   r   s      r   test_inplace_unionz%TestHTTPHeaderDict.test_inplace_union  s.    i(	XNH.A#BCCCCr   c                    t        j                  t        d      5  |dz   d d d        t        j                  t        d      5  d|z   d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY w)Nzunsupported operand type.*'int'r   r4   z!unsupported operand type.*'float'gQ	@r5   r6   r   r   s     r    test_union_with_unsupported_typez3TestHTTPHeaderDict.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                n    t        j                  t        d      5  |d z  }d d d        y # 1 sw Y   y xY w)Nz$unsupported operand type.*'NoneType'r   r  r   s     r   (test_inplace_union_with_unsupported_typez;TestHTTPHeaderDict.test_inplace_union_with_unsupported_type  s'    ]]9,RSIA TSSs   +4NrJ   )r   r   rB   rC   )r   r   r   ztuple[int, ...]rB   rC   ))rK   rL   rM   rp   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rN   r   r   rc   rc      s    

+
  &66!
/
,2L<8 [[Vfo%>?'6	 @
*J	*
%	4
#&*;;D
r   rc   )rB   r   )
__future__r   typingr5   urllib3._collectionsr   r   r   r   rP   fixturer   rc   rN   r   r   <module>r     sT    "   / Cy yx	 	  l lr   