B
    18™\7  ã               @   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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 )é    N)Úheaderregistryc             C   s   |   ¡ }| |¡ |S )N)ÚcopyÚupdate)Zbase_defaultsÚdifferencesÚdefaults© r   ú_/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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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'd.d/„ Z(G d0d1„ d1ƒZ)d2d3„ Z*d4d5„ Z+d6d7„ Z,d8d9„ Z-dS ):ÚPolicyAPITestsTéN   Ú
Ú8bitFN)Úmax_line_lengthÚlinesepÚcte_typeÚraise_on_defectÚmangle_from_Úmessage_factoryÚlong)Úutf8r   Úheader_factoryÚrefold_sourceÚcontent_managerr   r   r   z
)r   r   )r   r   r   r   c             C   sf   x`| j  ¡ D ]R\}}xH| ¡ D ]<\}}| j||d  |  t||ƒ|d |¡¡ W d Q R X qW qW d S )N)ÚpolicyÚattrz2change {} docs/docstrings if defaults have changed)ÚpoliciesÚitemsÚsubTestÚassertEqualÚgetattrÚformat)Úselfr   Úexpectedr   Úvaluer   r   r   Útest_defaultsA   s    zPolicyAPITests.test_defaultsc             C   s€   xz| j  ¡ D ]l\}}xbt|ƒD ]V}| j||d> | d¡sRtttjj	|ƒt
jƒrVwn|  ||d |¡¡ W d Q R X qW qW d S )N)r   r   Ú_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_coveredI   s    
z*PolicyAPITests.test_all_attributes_coveredc          	   C   sL   |   t¡}tj ¡  W d Q R X t|jƒ}d}x|D ]}|  ||¡ q4W d S )N)ÚfoldÚfold_binaryÚheader_fetch_parseÚheader_source_parseÚheader_store_parse)ÚassertRaisesÚ	TypeErrorr)   r   ÚPolicyÚstrÚ	exceptionr-   )r!   ÚcmÚmsgZabstract_methodsÚmethodr   r   r   Útest_abcU   s    

zPolicyAPITests.test_abcc             C   sp   xj| j  ¡ D ]\\}}x4|D ],}|  t|d ¡ t||d ƒ W d Q R X qW |  td¡ d |_W d Q R X qW d S )Nz.*read-onlyzno attribute.*foo)r   r   ÚassertRaisesRegexÚAttributeErrorÚsetattrÚfoo)r!   r   r   r   r   r   r   Útest_policy_is_immutablea   s    
z'PolicyAPITests.test_policy_is_immutablec             C   sT   xN| j  ¡ D ]@\}}dd„ |D ƒ}|jf |Ž}x|D ]}|  t||ƒ¡ q4W qW d S )Nc             S   s   i | ]
}d |“qS )Nr   )Ú.0r   r   r   r   ú
<dictcomp>m   s    zDPolicyAPITests.test_set_policy_attrs_when_cloned.<locals>.<dictcomp>)r   r   ÚcloneÚassertIsNoner   )r!   Úpolicyclassr   Ztestattrdictr   r   r   r   r   Ú!test_set_policy_attrs_when_clonedi   s
    
z0PolicyAPITests.test_set_policy_attrs_when_clonedc          
   C   sT   xN| j D ]D}|  t¡ |d d W d Q R X |  t¡ |d d W d Q R X qW d S )N)Z this_keyword_should_not_be_valid)Znewtline)r   r4   r5   )r!   rF   r   r   r   Ú*test_reject_non_policy_keyword_when_calledr   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 x&| ¡ D ]\}}|  t	||ƒ|¡ qHW || }|jdd x&| ¡ D ]\}}|  t	||ƒ|¡ q„W |tjj }x&| ¡ D ]\}}|  t	||ƒ|¡ q¸W d S )Néd   )r   é2   )
Úpolicy_defaultsr   r)   r   ÚdefaultrD   r   r   r   r   )r!   r"   Zp1Zp2Zaddedr   r#   r   r   r   Útest_policy_additiony   s    
z#PolicyAPITests.test_policy_additionc             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 )N)Údefects)r!   r   r   r   Ú__init__‹   s    z;PolicyAPITests.test_register_defect.<locals>.Dummy.__init__N)Ú__name__Ú
__module__Ú__qualname__rO   r   r   r   r   ÚDummyŠ   s   rS   )Úobjectr)   r   r*   Úregister_defectr   rN   )r!   rS   Ú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 )N)rN   )r!   r   r   r   rO   —   s    zPolicyAPITests.MyObj.__init__N)rP   rQ   rR   rO   r   r   r   r   ÚMyObj–   s   rZ   c               @   s   e Zd ZdS )zPolicyAPITests.MyDefectN)rP   rQ   rR   r   r   r   r   ÚMyDefectš   s   r[   c          	   C   s@   |   ¡ }|  d¡}|  | jd¡ tjj ||¡ W d Q R X d S )Nzthe telly is broken)rZ   r[   r=   r)   r   ÚstrictÚhandle_defect)r!   r@   rW   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 )NÚoneÚtwo)rZ   r[   r)   r   rL   r]   r   rN   )r!   r@   Údefect1rX   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 )NrN   )ÚsuperrO   )r!   ÚargsÚkw)Ú	__class__r   r   rO   ®   s    z PolicyAPITests.MyPolicy.__init__c             C   s   | j  |¡ d S )N)rN   Úappend)r!   rV   rW   r   r   r   rU   °   s    z'PolicyAPITests.MyPolicy.register_defect)rP   rQ   rR   rN   rO   rU   Ú__classcell__r   r   )rf   r   ÚMyPolicy¬   s   ri   c          	   C   sD   |   ¡ }|  d¡}|  | jd¡ | jdd ||¡ W d Q R X d S )Nzthe telly is brokenT)r   )rZ   r[   r=   ri   r]   )r!   r@   rW   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 )Nr_   r`   )rZ   r[   ri   r]   r   rN   )r!   r@   ra   Z	my_policyrX   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 )NÚTestÚtest)
r)   r   rL   r   r   ÚnameÚassertIsInstancer   ÚUnstructuredHeaderÚ
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)rP   rQ   rR   r   rp   Úparser   r   r   r   ÚFooË   s   ru   c             C   sx   t j ¡ }t j ¡ }|j d| j¡ | dd¡}|  || j¡ |  |tj	¡ | dd¡}|  || j¡ |  |tj	¡ d S )Nr@   rm   )
r)   r   r*   r   Úmap_to_typeru   ro   ÚassertNotIsInstancer   rp   )r!   Úpolicy1Úpolicy2rr   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 )Nr@   rm   )r)   r   r*   rD   r   rv   ru   ro   )r!   rx   ry   rr   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 )N)r)   r   r*   r   r\   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   rL   r\   r   r   r*   Ú__dict__)r!   r|   r   r   r   Ú6test_adding_default_policies_preserves_default_factoryê   s    zEPolicyAPITests.test_adding_default_policies_preserves_default_factory).rP   rQ   rR   ÚlongMessageZcompat32_defaultsr   rK   r   r)   r   r*   r   r   ÚmessageÚEmailMessageZ
new_policyÚcompat32r	   rL   ÚSMTPÚSMTPUTF8ÚHTTPr\   r   r$   r.   r<   rA   rG   rH   rM   rY   rZ   Ú	Exceptionr[   r^   rb   ri   rj   rk   rs   ru   rz   r{   r}   r   r   r   r   r   r
      sh   




			r
   c               @   s   e Zd ZdS )ÚTestExceptionN)rP   rQ   rR   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 )Nrm   )rˆ   )r!   rd   re   r   r   r   Ú	badmethodþ   s    z(TestPolicyPropagation.MyPolicy.badmethodN)	rP   rQ   rR   rŠ   r/   r0   Zheader_fetch_parserr2   r3   r   r   r   r   ri   ý   s   ri   c          	   C   s,   |   td¡ tjd| jd W d Q R X d S )Nz^test$zSubject: test

)r   )r=   rˆ   r)   Úmessage_from_stringri   )r!   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 Q R X d S )Nz^test$s   Subject: test

)r   )r=   rˆ   r)   Úmessage_from_bytesri   )r!   r   r   r   Útest_message_from_bytes  s    z-TestPolicyPropagation.test_message_from_bytesc          	   C   s6   t  d¡}|  td¡ tj|| jd W d Q R X d S )NzSubject: test

z^test$)r   )ÚioÚStringIOr=   rˆ   r)   Úmessage_from_fileri   )r!   Úfr   r   r   Útest_message_from_file  s    
z,TestPolicyPropagation.test_message_from_filec          	   C   s6   t  d¡}|  td¡ tj|| jd W d Q R X d S )Ns   Subject: test

z^test$)r   )r   ÚBytesIOr=   rˆ   r)   Úmessage_from_binary_fileri   )r!   r’   r   r   r   Útest_message_from_binary_file  s    
z3TestPolicyPropagation.test_message_from_binary_filec          	   C   s6   t jj| jd}|  td¡ | d¡ W d Q R X d S )N)r   z^test$zSubject: test

)r)   ÚparserÚParserri   r=   rˆ   Úparsestr)r!   Úpr   r   r   Útest_parser  s    z!TestPolicyPropagation.test_parserc          	   C   s6   t jj| jd}|  td¡ | d¡ W d Q R X d S )N)r   z^test$s   Subject: test

)r)   r—   ÚBytesParserri   r=   rˆ   Ú
parsebytes)r!   rš   r   r   r   Útest_bytes_parser  s    z'TestPolicyPropagation.test_bytes_parserúSubject: test

Nc             C   s*   |d krt jj ¡ n|| _t j|| jdS )N)r   )r)   r   rL   rD   r‹   )r!   Úsourcer   r   r   r   Ú	_make_msg'  s    zTestPolicyPropagation._make_msgc             C   s   |   ¡ }|  |j| j¡ d S )N)r¡   ÚassertIsr   )r!   r:   r   r   r   Ú(test_parser_propagates_policy_to_message+  s    z>TestPolicyPropagation.test_parser_propagates_policy_to_messagec             C   s6   |   t d¡¡}x | ¡ D ]}|  |j| j¡ qW 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!   r:   Úpartr   r   r   Ú-test_parser_propagates_policy_to_sub_messages/  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   rL   rD   r   r   Ú	generatorÚ	GeneratorÚflattenr   Úgetvalue)r!   r:   ÚsÚgr   r   r   Ú+test_message_policy_propagates_to_generatorB  s    
zATestPolicyPropagation.test_message_policy_propagates_to_generatorc             C   s.   | j dtjjjddd}|  | ¡ d¡ d S )NzSubject: test
To: foo

r©   )r   )r   zSubject: testXTo: fooXX)r¡   r)   r   rL   rD   r   Ú	as_string)r!   r:   r   r   r   Ú%test_message_policy_used_by_as_stringJ  s    z;TestPolicyPropagation.test_message_policy_used_by_as_string)rŸ   N)rP   rQ   rR   r)   r   r6   ri   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 )NÚFromzspam
egg@foo.py)r)   r   r*   r4   Ú
ValueErrorr3   )r!   Úinstancer   r   r   Ú(test_header_store_parse_rejects_newlinesR  s    
z=TestConcretePolicies.test_header_store_parse_rejects_newlinesN)rP   rQ   rR   r·   r   r   r   r   r³   P  s   r³   Ú__main__)r   r+   r¤   ÚunittestÚemail.policyr)   Úemail.parserÚemail.generatorÚemail.messager   r	   ÚTestCaser
   r‡   rˆ   r‰   r³   rP   Úmainr   r   r   r   Ú<module>   s     fX	