o
    JXhA                     @   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r[e  dS dS )    N)headerregistryc                 C   s   |   }|| |S N)copyupdate)Zbase_defaultsZdifferencesdefaults r   E/opt/python-3.10.19/usr/lib/python3.10/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 ]1\}}| D ](\}}| j||d | t|||d| W d    n1 s0w   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 ]D\}}t|D ];}| j||d* |ds'tttjj	|t
jr/	 W d    q| ||d| W d    n1 sCw   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w   Y  t|j}d}|D ]}| || q#d 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    n1 s&w   Y  q| td d |_W d    n1 s@w   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di |}|D ]
}| t|| qqd S )Nc                 S   s   i | ]}|d qS r   r   ).0r   r   r   r   
<dictcomp>o   s    zDPolicyAPITests.test_set_policy_attrs_when_cloned.<locals>.<dictcomp>r   )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 ]6}| t |d d W d    n1 sw   Y  | t |d d W d    n1 s4w   Y  qd S )N)Z this_keyword_should_not_be_valid)Znewtline)r   r2   r3   )r    rC   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	||| q#|| }|jdd | D ]\}}| t	||| q?|tjj }| D ]\}}| t	||| qWd S )Nd   r   2   )
policy_defaultsr   r(   r   defaultrB   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   rG   )r(   messageEmailMessager   rJ   rB   r   r.   )r    r!   r8   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                   @      e Zd Zdd ZdS )z2PolicyAPITests.test_register_defect.<locals>.Dummyc                 S   
   g | _ d S r   defectsr    r   r   r   __init__      
z;PolicyAPITests.test_register_defect.<locals>.Dummy.__init__N__name__
__module____qualname__rX   r   r   r   r   Dummy       r^   )objectr(   r   r)   register_defectr   rV   )r    r^   objdefectr   defect2r   r   r   test_register_defect   s   
z#PolicyAPITests.test_register_defectc                   @   rS   )zPolicyAPITests.MyObjc                 C   rT   r   rU   rW   r   r   r   rX      rY   zPolicyAPITests.MyObj.__init__NrZ   r   r   r   r   MyObj   r_   rf   c                   @      e Zd ZdS )zPolicyAPITests.MyDefectNr[   r\   r]   r   r   r   r   MyDefect       ri   c                 C   sV   |   }| d}| | jd tjj|| W d    d S 1 s$w   Y  d S )Nthe telly is broken)rf   ri   r;   r(   r   stricthandle_defectr    r>   rc   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)rf   ri   r(   r   rJ   rm   r   rV   )r    r>   defect1rd   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 )NrV   )superrX   r    argskw	__class__r   r   rX      s   z PolicyAPITests.MyPolicy.__init__c                 C   s   | j | d S r   )rV   append)r    rb   rc   r   r   r   ra      s   z'PolicyAPITests.MyPolicy.register_defect)r[   r\   r]   rV   rX   ra   __classcell__r   r   rw   r   MyPolicy   s    r{   c                 C   sZ   |   }| d}| | jd | jdd|| W d    d S 1 s&w   Y  d S )Nrk   T)r   )rf   ri   r;   r{   rm   rn   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 rp   )rf   ri   r{   rm   r   rV   )r    r>   rq   Z	my_policyrd   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)r[   r\   r]   r   r   parser   r   r   r   Foo   r_   r   c                 C   sx   t j }t j }|jd| j |dd}| || j | |tj	 |dd}| || j | |tj	 d S Nr>   r~   )
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)   rB   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   rl   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   rl   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 ]=}| j |d- tjjj|d}| tjj |d| W d    n1 s-w   Y  W d    n1 s<w   Y  qd S )Nz;Melt away the pounds with this one simple trick! 1234567890)      	   )maxlenrG   rO   )	r   r(   r   rJ   rB   r2   errorsZHeaderParseErrorr.   )r    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 ];}| j|d+ t jd|d}G dd dt}|d	= |||d	< | | | d
 W d   n1 s@w   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)r[   r\   r]   r   r.   r   r   r   r   LiteralHeader%  s    r   r   z
BodyN)	r(   r   rJ   rB   r   message_from_stringr5   r   	as_string)r    r   r   rP   r   r   r   r   test_verify_generated_headers  s"   z,PolicyAPITests.test_verify_generated_headers)2r[   r\   r]   ZlongMessageZcompat32_defaultsr   rI   r   r(   r   r)   r   r   rP   rQ   Z
new_policyZcompat32r	   rJ   ZSMTPZSMTPUTF8ZHTTPrl   r   r#   r-   r:   r?   rD   rE   rM   rR   re   rf   	Exceptionri   ro   rr   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r
      s    





			r
   c                   @   rg   )TestExceptionNrh   r   r   r   r   r   7  rj   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)Nr~   )r   rt   r   r   r   	badmethod@  s   z(TestPolicyPropagation.MyPolicy.badmethodN)	r[   r\   r]   r   r.   r/   Zheader_fetch_parserr0   r1   r   r   r   r   r{   ?  s    r{   c                 C   B   |  td tjd| jd W d    d S 1 sw   Y  d S )N^test$Subject: test

r   )r;   r   r(   r   r{   rW   r   r   r   test_message_from_stringE  
   "z.TestPolicyPropagation.test_message_from_stringc                 C   r   )Nr      Subject: test

r   )r;   r   r(   Zmessage_from_bytesr{   rW   r   r   r   test_message_from_bytesJ  r   z-TestPolicyPropagation.test_message_from_bytesc                 C   L   t d}| td tj|| jd W d    d S 1 sw   Y  d S )Nr   r   r   )ioStringIOr;   r   r(   Zmessage_from_filer{   r    fr   r   r   test_message_from_fileO     
"z,TestPolicyPropagation.test_message_from_filec                 C   r   )Nr   r   r   )r   BytesIOr;   r   r(   Zmessage_from_binary_filer{   r   r   r   r   test_message_from_binary_fileT  r   z3TestPolicyPropagation.test_message_from_binary_filec                 C   L   t jj| jd}| td |d W d    d S 1 sw   Y  d S )Nr   r   r   )r(   parserZParserr{   r;   r   Zparsestrr    pr   r   r   test_parser[     "z!TestPolicyPropagation.test_parserc                 C   r   )Nr   r   r   )r(   r   ZBytesParserr{   r;   r   Z
parsebytesr   r   r   r   test_bytes_parser`  r   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_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   rJ   rB   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   rJ   rB   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)r[   r\   r]   r(   r   r4   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   :  s    
	r   c                   @   rS   )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)r[   r\   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   r[   mainr   r   r   r   <module>   s(      (X	