a
    #RhA                     @   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   C/opt/python-3.9.24/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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@dA Z1dS )BPolicyAPITestsTN   
Z8bitFN)max_line_lengthlinesepZcte_typeraise_on_defectmangle_from_message_factoryverify_generated_headers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_defaultsC   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_coveredK   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_abcW   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_immutablec   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>o       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_clonedk   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   r2   r3   )r    rD   r   r   r   *test_reject_non_policy_keyword_when_calledt   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   defaultrC   r   r   r   r   )r    r!   p1p2Zaddedr   r"   r   r   r   test_policy_addition{   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   rH   )r(   messageEmailMessager   rK   rC   r   r.   )r    r!   r8   rL   rM   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__rW   r   r   r   r   Dummy   s   r\   )objectr(   r   r)   register_defectr   rU   )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   rT   rV   r   r   r   rW      s    zPolicyAPITests.MyObj.__init__NrX   r   r   r   r   MyObj   s   rc   c                   @   s   e Zd ZdS )zPolicyAPITests.MyDefectNrY   rZ   r[   r   r   r   r   MyDefect   s   re   c                 C   sT   |   }| d}| | jd  tjj|| W d    n1 sF0    Y  d S )Nthe telly is broken)rc   re   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)rc   re   r(   r   rK   rh   r   rU   )r    r>   defect1ra   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 )NrU   )superrW   r    argskw	__class__r   r   rW      s    z PolicyAPITests.MyPolicy.__init__c                 C   s   | j | d S r   )rU   append)r    r_   r`   r   r   r   r^      s    z'PolicyAPITests.MyPolicy.register_defect)rY   rZ   r[   rU   rW   r^   __classcell__r   r   rr   r   MyPolicy   s   rv   c                 C   sX   |   }| d}| | jd$ | jdd|| W d    n1 sJ0    Y  d S )Nrf   T)r   )rc   re   r;   rv   rh   ri   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 rk   )rc   re   rv   rh   r   rU   )r    r>   rl   Z	my_policyra   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   rK   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)rY   rZ   r[   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>   ry   )
r(   r   r)   r   map_to_typer   r{   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)   rC   r   r   r   r{   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   rg   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   rK   rg   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   rH   rP   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   rK   rC   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)      	   )maxlenrH   rP   )	r   r(   r   rK   rC   r2   errorsZHeaderParseErrorr.   )r    Zsubjectr   r   r   r   r   test_short_maxlen_error  s    z&PolicyAPITests.test_short_maxlen_errorc              	   C   s   t jjjdd}dD ]v}| j|dV t jd|d}G dd dt}|d	= |||d	< | | | d
 W d   q1 s0    Y  qdS )z.Turning protection off allows header injectionF)r   )zHeader: Value
Bad: Injection
zHeader: NoNewLine)textzHeader: Value

Bodyr   c                   @   s   e Zd ZdZdd ZdS )zCPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeaderHeaderc                 [   s   | S r   r   )r    kwargsr   r   r   r.   '  s    zHPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeader.foldN)rY   rZ   r[   rz   r.   r   r   r   r   LiteralHeader%  s   r   r   z
BodyN)	r(   r   rK   rC   r   message_from_stringr5   r   	as_string)r    r   r   rQ   r   r   r   r   test_verify_generated_headers  s    z,PolicyAPITests.test_verify_generated_headers)2rY   rZ   r[   ZlongMessageZcompat32_defaultsr   rJ   r   r(   r   r)   r   r   rQ   rR   Z
new_policyZcompat32r	   rK   ZSMTPZSMTPUTF8ZHTTPrg   r   r#   r-   r:   r?   rE   rF   rN   rS   rb   rc   	Exceptionre   rj   rm   rv   rw   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   r
      s   





			r
   c                   @   s   e Zd ZdS )TestExceptionNrd   r   r   r   r   r   7  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 )Nry   )r   ro   r   r   r   	badmethod@  s    z(TestPolicyPropagation.MyPolicy.badmethodN)	rY   rZ   r[   r   r.   r/   Zheader_fetch_parserr0   r1   r   r   r   r   rv   ?  s   rv   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(   r   rv   rV   r   r   r   test_message_from_stringE  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_bytesrv   rV   r   r   r   test_message_from_bytesJ  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_filerv   r    fr   r   r   test_message_from_fileO  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_filerv   r   r   r   r   test_message_from_binary_fileT  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Parserrv   r;   r   Zparsestrr    pr   r   r   test_parser[  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BytesParserrv   r;   r   Z
parsebytesr   r   r   r   test_bytes_parser`  s    z'TestPolicyPropagation.test_bytes_parserr   Nc                 C   s*   |d u rt jj n|| _t j|| jdS )Nr   )r(   r   rK   rC   r   )r    sourcer   r   r   r   	_make_msgi  s    zTestPolicyPropagation._make_msgc                 C   s   |   }| |j| j d S r   )r   assertIsr   r    r8   r   r   r   (test_parser_propagates_policy_to_messagem  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    r8   partr   r   r   -test_parser_propagates_policy_to_sub_messagesq  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   rK   rC   r   r   	generator	GeneratorZflattenr   getvalue)r    r8   sgr   r   r   +test_message_policy_propagates_to_generator  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   rK   rC   r   r   r   r   r   r   %test_message_policy_used_by_as_string  s    z;TestPolicyPropagation.test_message_policy_used_by_as_string)r   N)rY   rZ   r[   r(   r   r4   rv   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)   r2   
ValueErrorr1   )r    instancer   r   r   (test_header_store_parse_rejects_newlines  s
    
z=TestConcretePolicies.test_header_store_parse_rejects_newlinesN)rY   rZ   r[   r   r   r   r   r   r     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   rY   mainr   r   r   r   <module>   s$     (X	