a
    ze>                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dlm
Z
 dd ZG dd dejZG dd deZG d	d
 d
ejZG dd dejZedkre  dS )    N)headerregistryc                 C   s   |   }|| |S N)copyupdate)Zbase_defaultsZdifferencesdefaults r   1/usr/lib/python3.9/test/test_email/test_policy.pymake_defaults   s    
r	   c                   @   s  e Zd ZdZdddddddZe Zeddej	j
jdej	j
jdejjd	 ej	
 Zej	jeei ej	jeei ej	jeed
diej	jeedddej	jeedddej	jeeddieeei iZejee d< 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 G d"d# d#Z!G d$d% d%e"Z#d&d' Z$d(d) Z%G d*d+ d+ej	j
Z&d,d- Z'd.d/ Z(d0d1 Z)G d2d3 d3Z*d4d5 Z+d6d7 Z,d8d9 Z-d:d; Z.d<d= Z/d>d? Z0dS )@PolicyAPITestsTN   
Z8bitFN)max_line_lengthlinesepZcte_typeraise_on_defectmangle_from_message_factorylong)utf8r   header_factoryZrefold_sourcecontent_managerr   r   r   z
)r   r   )r   r   r   r   c              
   C   sr   | j  D ]b\}}| D ]P\}}| j||d* | t|||d| W d    q1 s`0    Y  qq
d S )Npolicyattrz2change {} docs/docstrings if defaults have changed)policiesitemssubTestassertEqualgetattrformat)selfr   expectedr   valuer   r   r   test_defaultsB   s    zPolicyAPITests.test_defaultsc              
   C   s   | j  D ]\}}t|D ]v}| j||dT |dsNtttjj	|t
jr^W d    qn| ||d| W d    q1 s0    Y  qq
d S )Nr   _z{} is not fully tested)r   r   dirr   
startswith
isinstancer   emailr   EmailPolicytypesFunctionTypeassertInr   )r   r   r    r   r   r   r   test_all_attributes_coveredJ   s    
z*PolicyAPITests.test_all_attributes_coveredc                 C   s\   |  t}tj  W d    n1 s*0    Y  t|j}d}|D ]}| || qFd S )N)foldfold_binaryZheader_fetch_parseheader_source_parseheader_store_parse)assertRaises	TypeErrorr'   r   Policystr	exceptionr+   )r   cmmsgZabstract_methodsmethodr   r   r   test_abcV   s    (
zPolicyAPITests.test_abcc              
   C   s   | j  D ]\}}|D ]@}| t|d  t||d  W d    q1 sL0    Y  q| td d |_W d    q
1 s0    Y  q
d S )Nz.*read-onlyzno attribute.*foo)r   r   assertRaisesRegexAttributeErrorsetattrfoo)r   r   r   r   r   r   r   test_policy_is_immutableb   s    ,z'PolicyAPITests.test_policy_is_immutablec                 C   sP   | j  D ]@\}}dd |D }|jf i |}|D ]}| t|| q4q
d S )Nc                 S   s   i | ]
}|d qS r   r   ).0r   r   r   r   
<dictcomp>n       zDPolicyAPITests.test_set_policy_attrs_when_cloned.<locals>.<dictcomp>)r   r   cloneZassertIsNoner   )r   policyclassr   Ztestattrdictr   r   r   r   r   !test_set_policy_attrs_when_clonedj   s
    z0PolicyAPITests.test_set_policy_attrs_when_clonedc              	   C   sx   | j D ]l}| t |d d W d    n1 s40    Y  | t |d d W d    q1 sh0    Y  qd S )N)Z this_keyword_should_not_be_valid)Znewtline)r   r1   r2   )r   rC   r   r   r   *test_reject_non_policy_keyword_when_calleds   s
    
(z9PolicyAPITests.test_reject_non_policy_keyword_when_calledc                 C   s   | j  }tjjjdd}tjjjdd}|| }|jdd | D ]\}}| t	||| qF|| }|jdd | D ]\}}| t	||| q~|tjj }| D ]\}}| t	||| qd S )Nd   r   2   )
policy_defaultsr   r'   r   defaultrB   r   r   r   r   )r   r    p1p2Zaddedr   r!   r   r   r   test_policy_additionz   s    
z#PolicyAPITests.test_policy_additionc                 C   sj   d}t j }d|d< t jjjdd}t jjjd d}| |d|d | | |d|d | d S )NzSubject: =?utf-8?q?=C3=A1?=
   áSubjectr   rG   )r'   messageEmailMessager   rJ   rB   r   r-   )r   r    r7   rK   rL   r   r   r   test_fold_zero_max_line_length   s    
z-PolicyAPITests.test_fold_zero_max_line_lengthc                 C   sh   G dd d}| }t  }tj }||| | |j|g t  }||| | |j||g d S )Nc                   @   s   e Zd Zdd ZdS )z2PolicyAPITests.test_register_defect.<locals>.Dummyc                 S   s
   g | _ d S r   defectsr   r   r   r   __init__   s    z;PolicyAPITests.test_register_defect.<locals>.Dummy.__init__N__name__
__module____qualname__rV   r   r   r   r   Dummy   s   r[   )objectr'   r   r(   register_defectr   rT   )r   r[   objdefectr   defect2r   r   r   test_register_defect   s    
z#PolicyAPITests.test_register_defectc                   @   s   e Zd Zdd ZdS )zPolicyAPITests.MyObjc                 C   s
   g | _ d S r   rS   rU   r   r   r   rV      s    zPolicyAPITests.MyObj.__init__NrW   r   r   r   r   MyObj   s   rb   c                   @   s   e Zd ZdS )zPolicyAPITests.MyDefectNrX   rY   rZ   r   r   r   r   MyDefect   s   rd   c                 C   sT   |   }| d}| | jd  tjj|| W d    n1 sF0    Y  d S )Nthe telly is broken)rb   rd   r:   r'   r   stricthandle_defectr   r=   r_   r   r   r   #test_handle_defect_raises_on_strict   s    
z2PolicyAPITests.test_handle_defect_raises_on_strictc                 C   sb   |   }| d}tjj|| | |j|g | d}tjj|| | |j||g d S NZoneZtwo)rb   rd   r'   r   rJ   rg   r   rT   )r   r=   defect1r`   r   r   r   #test_handle_defect_registers_defect   s    

z2PolicyAPITests.test_handle_defect_registers_defectc                       s(   e Zd ZdZ fddZdd Z  ZS )zPolicyAPITests.MyPolicyNc                    s   t  j|dg i| d S )NrT   )superrV   r   argskw	__class__r   r   rV      s    z PolicyAPITests.MyPolicy.__init__c                 C   s   | j | d S r   )rT   append)r   r^   r_   r   r   r   r]      s    z'PolicyAPITests.MyPolicy.register_defect)rX   rY   rZ   rT   rV   r]   __classcell__r   r   rq   r   MyPolicy   s   ru   c                 C   sX   |   }| d}| | jd$ | jdd|| W d    n1 sJ0    Y  d S )Nre   T)r   )rb   rd   r:   ru   rg   rh   r   r   r   ,test_overridden_register_defect_still_raises   s    
z;PolicyAPITests.test_overridden_register_defect_still_raisesc                 C   s~   |   }| d}|  }||| | |j|g | |jg  | d}||| | |j||g | |jg  d S rj   )rb   rd   ru   rg   r   rT   )r   r=   rk   Z	my_policyr`   r   r   r   %test_overridden_register_defect_works   s    

z4PolicyAPITests.test_overridden_register_defect_worksc                 C   s>   t jjdd}| |jd | |tj | |tj	 d S )NZTesttest)
r'   r   rJ   r   r   nameassertIsInstancer   UnstructuredHeaderZ
BaseHeader)r   hr   r   r   test_default_header_factory   s    z*PolicyAPITests.test_default_header_factoryc                   @   s   e Zd ZejjZdS )zPolicyAPITests.FooN)rX   rY   rZ   r   r{   parser   r   r   r   Foo   s   r   c                 C   sx   t j }t j }|jd| j |dd}| || j | |tj	 |dd}| || j | |tj	 d S Nr=   rx   )
r'   r   r(   r   map_to_typer   rz   ZassertNotIsInstancer   r{   r   Zpolicy1Zpolicy2r|   r   r   r   $test_each_Policy_gets_unique_factory   s    

z3PolicyAPITests.test_each_Policy_gets_unique_factoryc                 C   sZ   t j }| }|jd| j |dd}| || j |dd}| || j d S r   )r'   r   r(   rB   r   r   r   rz   r   r   r   r   test_clone_copies_factory   s    
z(PolicyAPITests.test_clone_copies_factoryc                 C   sH   t j }|j}|t jj }| |j| t jj| }| |j| d S r   )r'   r   r(   r   rf   r   )r   ZmypolicyZ	myfactory	newpolicyr   r   r   "test_new_factory_overrides_default   s    
z1PolicyAPITests.test_new_factory_overrides_defaultc                 C   s:   t jjt jj }| |jt jjj | |jddi d S )Nr   T)r'   r   rJ   rf   r   r   r(   __dict__)r   r   r   r   r   6test_adding_default_policies_preserves_default_factory   s
    zEPolicyAPITests.test_adding_default_policies_preserves_default_factoryc                 C   s,   t jjjdd}|dd}| |d d S )N   rG   rO   u   ąąąąąąąąąąąązSubject: 
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
)r'   r   rJ   rB   r-   r   )r   r   actualr   r   r   *test_non_ascii_chars_do_not_cause_inf_loop   s    z9PolicyAPITests.test_non_ascii_chars_do_not_cause_inf_loopc              
   C   s   d}dD ]z}| j |dZ tjjj|d}| tjj |d| W d    n1 sZ0    Y  W d    q1 sx0    Y  qd S )Nz;Melt away the pounds with this one simple trick! 1234567890)      	   )maxlenrG   rO   )	r   r'   r   rJ   rB   r1   errorsZHeaderParseErrorr-   )r   Zsubjectr   r   r   r   r   test_short_maxlen_error  s    z&PolicyAPITests.test_short_maxlen_error)1rX   rY   rZ   ZlongMessageZcompat32_defaultsr   rI   r   r'   r   r(   r   r   rP   rQ   Z
new_policyZcompat32r	   rJ   ZSMTPZSMTPUTF8ZHTTPrf   r   r"   r,   r9   r>   rD   rE   rM   rR   ra   rb   	Exceptionrd   ri   rl   ru   rv   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r
      s   






			r
   c                   @   s   e Zd ZdS )TestExceptionNrc   r   r   r   r   r     s   r   c                   @   sz   e Zd ZG dd dejjZdd Zdd Zdd Z	d	d
 Z
dd Zdd ZdddZdd Zdd Zdd Zdd ZdS )TestPolicyPropagationc                   @   s(   e Zd Zdd Ze Z ZZe ZZdS )zTestPolicyPropagation.MyPolicyc                 O   s   t dd S )Nrx   )r   rn   r   r   r   	badmethod&  s    z(TestPolicyPropagation.MyPolicy.badmethodN)	rX   rY   rZ   r   r-   r.   Zheader_fetch_parserr/   r0   r   r   r   r   ru   %  s   ru   c                 C   s@   |  td  tjd| jd W d    n1 s20    Y  d S )N^test$Subject: test

r   )r:   r   r'   message_from_stringru   rU   r   r   r   test_message_from_string+  s    z.TestPolicyPropagation.test_message_from_stringc                 C   s@   |  td  tjd| jd W d    n1 s20    Y  d S )Nr      Subject: test

r   )r:   r   r'   Zmessage_from_bytesru   rU   r   r   r   test_message_from_bytes0  s    z-TestPolicyPropagation.test_message_from_bytesc                 C   sJ   t d}| td  tj|| jd W d    n1 s<0    Y  d S )Nr   r   r   )ioStringIOr:   r   r'   Zmessage_from_fileru   r   fr   r   r   test_message_from_file5  s    
z,TestPolicyPropagation.test_message_from_filec                 C   sJ   t d}| td  tj|| jd W d    n1 s<0    Y  d S )Nr   r   r   )r   BytesIOr:   r   r'   Zmessage_from_binary_fileru   r   r   r   r   test_message_from_binary_file:  s    
z3TestPolicyPropagation.test_message_from_binary_filec                 C   sJ   t jj| jd}| td |d W d    n1 s<0    Y  d S )Nr   r   r   )r'   parserZParserru   r:   r   Zparsestrr   pr   r   r   test_parserA  s    z!TestPolicyPropagation.test_parserc                 C   sJ   t jj| jd}| td |d W d    n1 s<0    Y  d S )Nr   r   r   )r'   r   ZBytesParserru   r:   r   Z
parsebytesr   r   r   r   test_bytes_parserF  s    z'TestPolicyPropagation.test_bytes_parserr   Nc                 C   s*   |d u rt jj n|| _t j|| jdS )Nr   )r'   r   rJ   rB   r   )r   sourcer   r   r   r   	_make_msgO  s    zTestPolicyPropagation._make_msgc                 C   s   |   }| |j| j d S r   )r   assertIsr   r   r7   r   r   r   (test_parser_propagates_policy_to_messageS  s    z>TestPolicyPropagation.test_parser_propagates_policy_to_messagec                 C   s2   |  td}| D ]}| |j| j qd S )Na+              Subject: mime test
            MIME-Version: 1.0
            Content-Type: multipart/mixed, boundary="XXX"

            --XXX
            Content-Type: text/plain

            test
            --XXX
            Content-Type: text/plain

            test2
            --XXX--
            )r   textwrapdedentwalkr   r   )r   r7   partr   r   r   -test_parser_propagates_policy_to_sub_messagesW  s    zCTestPolicyPropagation.test_parser_propagates_policy_to_sub_messagesc                 C   sL   | j dtjjjddd}t }tj|}|	| | 
| d d S NzSubject: test
To: foo

X)r   r   zSubject: testXTo: fooXX)r   r'   r   rJ   rB   r   r   	generator	GeneratorZflattenr   getvalue)r   r7   sgr   r   r   +test_message_policy_propagates_to_generatorj  s    
zATestPolicyPropagation.test_message_policy_propagates_to_generatorc                 C   s.   | j dtjjjddd}| | d d S r   )r   r'   r   rJ   rB   r   Z	as_stringr   r   r   r   %test_message_policy_used_by_as_stringr  s    z;TestPolicyPropagation.test_message_policy_used_by_as_string)r   N)rX   rY   rZ   r'   r   r3   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   	
r   c                   @   s   e Zd Zdd ZdS )TestConcretePoliciesc                 C   s    t j }| t|jdd d S )NZFromzspam
egg@foo.py)r'   r   r(   r1   
ValueErrorr0   )r   instancer   r   r   (test_header_store_parse_rejects_newlinesz  s
    
z=TestConcretePolicies.test_header_store_parse_rejects_newlinesN)rX   rY   rZ   r   r   r   r   r   r   x  s   r   __main__)r   r)   r   ZunittestZemail.errorsr'   Zemail.policyZemail.parserZemail.generatorZemail.messager   r	   ZTestCaser
   r   r   r   r   rX   mainr   r   r   r   <module>   s$     X	