
    <e>                        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 Z G d dej                  Z G d de          Z G d d	ej                  Z G d
 dej                  Zedk    r ej                     dS dS )    N)headerregistryc                 X    |                                  }|                    |           |S N)copyupdate)base_defaultsdifferencesdefaultss      2/usr/lib/python3.11/test/test_email/test_policy.pymake_defaultsr      s*    !!##HOOK   O    c                   X   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 Zd Zd Zd Zd Zd Zd Zd Zd Z  G d d          Z! G d de"          Z#d Z$d Z% G d d ej	        j
                  Z&d! Z'd" Z(d# Z) G d$ d%          Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0dS ),PolicyAPITestsTN   
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           
      F   | j                                         D ]\  }}|                                D ]l\  }}|                     ||          5  |                     t	          ||          |d                    |                     d d d            n# 1 swxY w Y   md S )Npolicyattrz2change {} docs/docstrings if defaults have changed)policiesitemssubTestassertEqualgetattrformat)selfr    expectedr!   values        r   test_defaultszPolicyAPITests.test_defaultsB   s     $ 3 3 5 5 	? 	?FH'~~// ? ?e\\d\;; ? ?$$WVT%:%:E&./5vf~~? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ??	? 	?s   9BBBc           
         | j                                         D ]\  }}t          |          D ]}|                     ||          5  |                    d          s7t          t          t          j        j	        |          t          j                  r	 d d d            s|                     ||d                    |                     	 d d d            n# 1 swxY w Y   d S )Nr   _z{} is not fully tested)r"   r#   dirr$   
startswith
isinstancer&   emailr    EmailPolicytypesFunctionTypeassertInr'   )r(   r    r)   r!   s       r   test_all_attributes_coveredz*PolicyAPITests.test_all_attributes_coveredJ   sp    $ 3 3 5 5 		M 		MFHF M M\\d\;; M M,, M&wu|/G'N'N"'"46 6M !	M M M M M M M dH&>&E&Ed&K&KM M M MM M M M M M M M M M M M M M MM		M 		Ms   AC!*CCCc                    |                      t                    5 }t          j                                         d d d            n# 1 swxY w Y   t          |j                  }d}|D ]}|                     ||           d S )N)foldfold_binaryheader_fetch_parseheader_source_parseheader_store_parse)assertRaises	TypeErrorr1   r    Policystr	exceptionr5   )r(   cmmsgabstract_methodsmethods        r   test_abczPolicyAPITests.test_abcV   s    y)) 	"RL!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"",2
 ' 	' 	'FMM&#&&&&	' 	's   AA
A
c                 P   | j                                         D ]\  }}|D ]I}|                     t          |dz             5  t	          ||d            d d d            n# 1 swxY w Y   J|                     t          d          5  d |_        d d d            n# 1 swxY w Y   d S )Nz.*read-onlyzno attribute.*foo)r"   r#   assertRaisesRegexAttributeErrorsetattrfoo)r(   r    r
   r!   s       r   test_policy_is_immutablez'PolicyAPITests.test_policy_is_immutableb   s4    $ 3 3 5 5 	" 	"FH  0 0++ND<NOO 0 0FD$///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0''8KLL " "!
" " " " " " " " " " " " " " "		" 	"s$   AA#&A#BB	!B	c                     | j                                         D ]F\  }}d |D             } |j        di |}|D ]%}|                     t	          ||                     &Gd S )Nc                     i | ]}|d S r    ).0r!   s     r   
<dictcomp>zDPolicyAPITests.test_set_policy_attrs_when_cloned.<locals>.<dictcomp>n   s    <<<4D$<<<r   rO   )r"   r#   cloneassertIsNoner&   )r(   policyclassr
   testattrdictr    r!   s         r   !test_set_policy_attrs_when_clonedz0PolicyAPITests.test_set_policy_attrs_when_clonedj   s     &*]%8%8%:%: 	9 	9!K<<8<<<L&[&6666F  9 9!!'&$"7"788889	9 	9r   c                    | j         D ]~}|                     t                    5   |d            d d d            n# 1 swxY w Y   |                     t                    5   |d            d d d            n# 1 swxY w Y   d S )N) this_keyword_should_not_be_valid)newtline)r"   r=   r>   )r(   rT   s     r   *test_reject_non_policy_keyword_when_calledz9PolicyAPITests.test_reject_non_policy_keyword_when_calleds   s'   = 	+ 	+K""9-- C CTBBBBC C C C C C C C C C C C C C C""9-- + +T****+ + + + + + + + + + + + + + +	+ 	+s!   =A	A	"A;;A?	A?	c                    | j                                         }t          j        j                            d          }t          j        j                            d          }||z   }|                    d           |                                D ])\  }}|                     t          ||          |           *||z   }|                    d           |                                D ])\  }}|                     t          ||          |           *|t          j        j        z   }|                                D ])\  }}|                     t          ||          |           *d S )Nd   r   2   )
policy_defaultsr   r1   r    defaultrR   r   r#   r%   r&   )r(   r)   p1p2addedr!   r*   s          r   test_policy_additionz#PolicyAPITests.test_policy_additionz   s_   ',,..\!'''<<\!''';;R+++#>>++ 	: 	:KD%WUD1159999R,,,#>>++ 	: 	:KD%WUD1159999,,#>>++ 	: 	:KD%WUD1159999	: 	:r   c                    d}t           j                                        }d|d<   t           j        j                            d          }t           j        j                            d           }|                     |                    d|d                   |           |                     |                    d|d                   |           d S )NzSubject: =?utf-8?q?=C3=A1?=
   áSubjectr   r]   )r1   messageEmailMessager    r`   rR   r%   r8   )r(   r)   rC   ra   rb   s        r   test_fold_zero_max_line_lengthz-PolicyAPITests.test_fold_zero_max_line_length   s    2m((**I\!'''::\!'''==C	N;;XFFFC	N;;XFFFFFr   c                 r    G d d          } |            }t                      }t          j                                        }|                    ||           |                     |j        |g           t                      }|                    ||           |                     |j        ||g           d S )Nc                       e Zd Zd ZdS )2PolicyAPITests.test_register_defect.<locals>.Dummyc                     g | _         d S r   defectsr(   s    r   __init__z;PolicyAPITests.test_register_defect.<locals>.Dummy.__init__   s    !r   N__name__
__module____qualname__rr   rO   r   r   Dummyrm      s#        " " " " "r   rw   )objectr1   r    r2   register_defectr%   rp   )r(   rw   objdefectr    defect2s         r   test_register_defectz#PolicyAPITests.test_register_defect   s    	" 	" 	" 	" 	" 	" 	" 	" egg))++sF+++vh///((sG,,,vw&788888r   c                       e Zd Zd ZdS )PolicyAPITests.MyObjc                     g | _         d S r   ro   rq   s    r   rr   zPolicyAPITests.MyObj.__init__   s    DLLLr   Nrs   rO   r   r   MyObjr      s#        	 	 	 	 	r   r   c                       e Zd ZdS )PolicyAPITests.MyDefectNrt   ru   rv   rO   r   r   MyDefectr      s        r   r   c                 
   |                                  }|                     d          }|                     | j        d          5  t          j        j                            ||           d d d            d S # 1 swxY w Y   d S )Nthe telly is broken)r   r   rH   r1   r    stricthandle_defectr(   rK   r{   s      r   #test_handle_defect_raises_on_strictz2PolicyAPITests.test_handle_defect_raises_on_strict   s    jjll455##DM3HII 	; 	;L--c6:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   &A88A<?A<c                    |                                  }|                     d          }t          j        j                            ||           |                     |j        |g           |                     d          }t          j        j                            ||           |                     |j        ||g           d S Nonetwo)r   r   r1   r    r`   r   r%   rp   )r(   rK   defect1r|   s       r   #test_handle_defect_registers_defectz2PolicyAPITests.test_handle_defect_registers_defect   s    jjll--&&**3888wi000--&&**3888w&899999r   c                   (     e Zd ZdZ fdZd Z xZS )PolicyAPITests.MyPolicyNc                 >     t                      j        |dg i| d S )Nrp   )superrr   )r(   argskw	__class__s      r   rr   z PolicyAPITests.MyPolicy.__init__   s*    EGGd5B5"55555r   c                 :    | j                             |           d S r   )rp   append)r(   rz   r{   s      r   ry   z'PolicyAPITests.MyPolicy.register_defect   s    L'''''r   )rt   ru   rv   rp   rr   ry   __classcell__)r   s   @r   MyPolicyr      sL        	6 	6 	6 	6 	6	( 	( 	( 	( 	( 	( 	(r   r   c                    |                                  }|                     d          }|                     | j        d          5  |                     d                              ||           d d d            d S # 1 swxY w Y   d S )Nr   T)r   )r   r   rH   r   r   r   s      r   ,test_overridden_register_defect_still_raisesz;PolicyAPITests.test_overridden_register_defect_still_raises   s    jjll455##DM3HII 	K 	KMM$M//==c6JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   +A==BBc                    |                                  }|                     d          }|                                 }|                    ||           |                     |j        |g           |                     |j        g            |                     d          }|                    ||           |                     |j        ||g           |                     |j        g            d S r   )r   r   r   r   r%   rp   )r(   rK   r   	my_policyr|   s        r   %test_overridden_register_defect_worksz4PolicyAPITests.test_overridden_register_defect_works   s    jjll--&&MMOO	W---*WI666b)))--&&W---*Wg,>???b)))))r   c                    t           j        j                            dd          }|                     |j        d           |                     |t          j                   |                     |t          j	                   d S )NTesttest)
r1   r    r`   r   r%   nameassertIsInstancer   UnstructuredHeader
BaseHeader)r(   hs     r   test_default_header_factoryz*PolicyAPITests.test_default_header_factory   sl    L //??(((a!BCCCa!:;;;;;r   c                   &    e Zd Zej        j        ZdS )PolicyAPITests.FooN)rt   ru   rv   r   r   parserO   r   r   Foor      s        17r   r   c                    t           j                                        }t           j                                        }|j                            d| j                   |                    dd          }|                     || j                   |                     |t          j	                   |                    dd          }|                     || j                   |                     |t          j	                   d S NrK   r   )
r1   r    r2   r   map_to_typer   r   assertNotIsInstancer   r   r(   policy1policy2r   s       r   $test_each_Policy_gets_unique_factoryz3PolicyAPITests.test_each_Policy_gets_unique_factory   s    ,**,,,**,,**5$(;;;""5&11a***  N$EFFF""5&11  DH---a!BCCCCCr   c                 n   t           j                                        }|                                }|j                            d| j                   |                    dd          }|                     || j                   |                    dd          }|                     || j                   d S r   )r1   r    r2   rR   r   r   r   r   r   s       r   test_clone_copies_factoryz(PolicyAPITests.test_clone_copies_factory   s    ,**,,--//**5$(;;;""5&11a***""5&11a*****r   c                    t           j                                        }|j        }|t           j        j        z   }|                     |j        |           t           j        j        |z   }|                     |j        |           d S r   )r1   r    r2   r   r   r%   )r(   mypolicy	myfactory	newpolicys       r   "test_new_factory_overrides_defaultz1PolicyAPITests.test_new_factory_overrides_default   ss    <++--+	u|22	19===L'(2	19=====r   c                     t           j        j        t           j        j        z   }|                     |j        t           j        j        j                   |                     |j        ddi           d S )Nr   T)r1   r    r`   r   r%   r   r2   __dict__)r(   r   s     r   6test_adding_default_policies_preserves_default_factoryzEPolicyAPITests.test_adding_default_policies_preserves_default_factory   sf    L(5<+>>	11@	B 	B 	B+.?-FGGGGGr   c                     t           j        j                            d          }|                    dd          }|                     |d           d S )N   r]   rg   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?=
)r1   r    r`   rR   r8   r%   )r(   r    actuals      r   *test_non_ascii_chars_do_not_cause_inf_loopz9PolicyAPITests.test_non_ascii_chars_do_not_cause_inf_loop   sZ    %++B+??Y	22)	* 	* 	* 	* 	*r   c                 ^   d}dD ]}|                      |          5  t          j        j                            |          }|                     t          j        j                  5  |                    d|           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nz;Melt away the pounds with this one simple trick! 1234567890)      	   )maxlenr]   rg   )	r$   r1   r    r`   rR   r=   errorsHeaderParseErrorr8   )r(   subjectr   r    s       r   test_short_maxlen_errorz&PolicyAPITests.test_short_maxlen_error  s*    P 	4 	4FV,, 4 4-33F3KK&&u|'DEE 4 4KK	73334 4 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s6   A
B!'B
>B!
BB!BB!!B%	(B%	)1rt   ru   rv   longMessagecompat32_defaultsr   r_   r   r1   r    r2   r   r   rh   ri   
new_policycompat32r   r`   SMTPSMTPUTF8HTTPr   r"   r+   r6   rF   rL   rV   rZ   rd   rj   r}   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   r   r   r   r      s       K %'$($*$)$($(
 
 (,,..O$)$)$)L$<$K$*$)L$<$L$)$)M$>
 
    ))++J}}->CCmmOR@@==*3V)<> >}}_9?6:.< .< =  = 	==5;=A*C *CD D 	]]?,=t+DF FMM/266
H" .8-FHZ)*? ? ?
M 
M 
M
' 
' 
'" " "9 9 9+ + +: : : 
G 
G 
G9 9 9           9   ; ; ;: : :( ( ( ( (5<+ ( ( (K K K
* 
* 
*< < <8 8 8 8 8 8 8 8	D 	D 	D+ + +> > >H H H* * *4 4 4 4 4r   r   c                       e Zd ZdS )TestExceptionNr   rO   r   r   r   r     s        Dr   r   c                       e Zd Z G d dej        j                  Zd Zd Zd Z	d Z
d Zd ZddZd Zd Zd Zd Zd
S )TestPolicyPropagationc                   (    e Zd Zd ZexZxZZexZZdS )TestPolicyPropagation.MyPolicyc                      t          d          )Nr   )r   )r(   r   r   s      r   	badmethodz(TestPolicyPropagation.MyPolicy.badmethod&  s    '''r   N)	rt   ru   rv   r   r8   r9   header_fetch_parserr;   r<   rO   r   r   r   r   %  s;        	( 	( 	(3<<<{03<<000r   r   c                     |                      t          d          5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )N^test$Subject: test

r    )rH   r   r1   message_from_stringr   rq   s    r   test_message_from_stringz.TestPolicyPropagation.test_message_from_string+  s    ##M8<< 	< 	<%&9-1]< < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<   AA	A	c                     |                      t          d          5  t          j        d| j                   d d d            d S # 1 swxY w Y   d S )Nr      Subject: test

r   )rH   r   r1   message_from_bytesr   rq   s    r   test_message_from_bytesz-TestPolicyPropagation.test_message_from_bytes0  s    ##M8<< 	; 	;$%9,0M; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;r   c                     t          j        d          }|                     t          d          5  t	          j        || j                   d d d            d S # 1 swxY w Y   d S )Nr   r   r   )ioStringIOrH   r   r1   message_from_filer   r(   fs     r   test_message_from_filez,TestPolicyPropagation.test_message_from_file5  s    K+,,##M8<< 	= 	=#Adm<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=   AA Ac                     t          j        d          }|                     t          d          5  t	          j        || j                   d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r   BytesIOrH   r   r1   message_from_binary_filer   r   s     r   test_message_from_binary_filez3TestPolicyPropagation.test_message_from_binary_file:  s    J+,,##M8<< 	D 	D*1T]CCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dr   c                     t           j                            | j                  }|                     t
          d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r1   parserParserr   rH   r   parsestrr(   ps     r   test_parserz!TestPolicyPropagation.test_parserA  s    Lt}55##M8<< 	, 	,JJ*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   A$$A(+A(c                     t           j                            | j                  }|                     t
          d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r1   r   BytesParserr   rH   r   
parsebytesr   s     r   test_bytes_parserz'TestPolicyPropagation.test_bytes_parserF  s    L$$DM$::##M8<< 	/ 	/LL-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r   r   Nc                     |#t           j        j                                        n|| _        t          j        || j                  S )Nr   )r1   r    r`   rR   r   )r(   sourcer    s      r   	_make_msgzTestPolicyPropagation._make_msgO  s;    6<nel*00222&(DDDDr   c                 n    |                                  }|                     |j        | j                   d S r   )r  assertIsr    r(   rC   s     r   (test_parser_propagates_policy_to_messagez>TestPolicyPropagation.test_parser_propagates_policy_to_messageS  s/    nncj$+.....r   c                     |                      t          j        d                    }|                                D ]"}|                     |j        | j                   #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(   rC   parts      r   -test_parser_propagates_policy_to_sub_messageszCTestPolicyPropagation.test_parser_propagates_policy_to_sub_messagesW  sf    nnX_ .     HHJJ 	4 	4DMM$+t{3333	4 	4r   c                 X   |                      dt          j        j                            d                    }t          j                    }t          j                            |          }|	                    |           | 
                    |                                d           d S NzSubject: test
To: foo

X)r   r   zSubject: testXTo: fooXX)r  r1   r    r`   rR   r   r   	generator	Generatorflattenr%   getvalue)r(   rC   sgs       r   +test_message_policy_propagates_to_generatorzATestPolicyPropagation.test_message_policy_propagates_to_generatorj  s    nn9$)L$8$>$>s$>$K$K  M MKMMO%%a((			#'@AAAAAr   c                     |                      dt          j        j                            d                    }|                     |                                d           d S r  )r  r1   r    r`   rR   r%   	as_stringr  s     r   %test_message_policy_used_by_as_stringz;TestPolicyPropagation.test_message_policy_used_by_as_stringr  s]    nn9$)L$8$>$>s$>$K$K  M M*CDDDDDr   )r   N)rt   ru   rv   r1   r    r?   r   r   r   r   r   r   r  r  r  r  r  r  rO   r   r   r   r      s        
= = = = =5<& = = =< < <
; ; ;
= = =
D D D, , ,
/ / /E E E E/ / /4 4 4&B B BE E E E Er   r   c                       e Zd Zd ZdS )TestConcretePoliciesc                     t           j                                        }|                     t          |j        dd           d S )NFromzspam
egg@foo.py)r1   r    r2   r=   
ValueErrorr<   )r(   instances     r   (test_header_store_parse_rejects_newlinesz=TestConcretePolicies.test_header_store_parse_rejects_newlinesz  sE    <++--*"5 "4	6 	6 	6 	6 	6r   N)rt   ru   rv   r"  rO   r   r   r  r  x  s#        6 6 6 6 6r   r  __main__)r   r3   r
  unittestemail.errorsr1   email.policyemail.parseremail.generatoremail.messager   r   TestCaser   r   r   r   r  rt   mainrO   r   r   <module>r,     sw   				                                     
E4 E4 E4 E4 E4X& E4 E4 E4X	 	 	 	 	I 	 	 	UE UE UE UE UEH- UE UE UEp6 6 6 6 68, 6 6 6 zHMOOOOO r   