
    7\hD                        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      E/opt/python-3.11.14/usr/lib/python3.11/test/test_email/test_policy.pymake_defaultsr      s*    !!##HOOK   O    c                   f   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 Z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+ Z0d, Z1d- Z2dS ).PolicyAPITestsTN   
8bitFN)max_line_lengthlinesepcte_typeraise_on_defectmangle_from_message_factoryverify_generated_headers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_defaultsC   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_coveredK   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	TypeErrorr2   r!   Policystr	exceptionr6   )r)   cmmsgabstract_methodsmethods        r   test_abczPolicyAPITests.test_abcW   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_immutablec   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>o   s    <<<4D$<<<r   rP   )r#   r$   cloneassertIsNoner'   )r)   policyclassr
   testattrdictr!   r"   s         r   !test_set_policy_attrs_when_clonedz0PolicyAPITests.test_set_policy_attrs_when_clonedk   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)   rU   s     r   *test_reject_non_policy_keyword_when_calledz9PolicyAPITests.test_reject_non_policy_keyword_when_calledt   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   r2   r!   defaultrS   r   r$   r&   r'   )r)   r*   p1p2addedr"   r+   s          r   test_policy_additionz#PolicyAPITests.test_policy_addition{   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                 P   d}d}t           j                                        }d}||d<   t           j        j                                        }t           j        j                            d          }|                     |                    d|d                   |           |                     |                    d|d                   |           |                     |                    d|          |           |                     |                    d|          |           d S )NSubject: =?utf-8?q?=C3=A1?=
u   Subject: á
   áSubjectT)r   r2   messageEmailMessager!   ra   rS   r&   r9   )r)   expected_asciiexpected_utf8rD   sp_asciip_utf8s          r   test_fold_utf8zPolicyAPITests.test_fold_utf8   s    8'm((**I,&,,..%+++66iY@@.QQQYI??OOOi33^DDDY22MBBBBBr   c                    d}t           j                                        }d|d<   t           j        j                            d          }t           j        j                            d           }|                     |                    d|d                   |           |                     |                    d|d                   |           d S )Nrg   rh   ri   r   r^   rj   )r)   r*   rD   rb   rc   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__r|   rP   r   r   Dummyrw      s#        " " " " "r   r   )objectr2   r!   r3   register_defectr&   rz   )r)   r   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   ry   r{   s    r   r|   zPolicyAPITests.MyObj.__init__   s    DLLLr   Nr}   rP   r   r   MyObjr      s#        	 	 	 	 	r   r   c                       e Zd ZdS )PolicyAPITests.MyDefectNr~   r   r   rP   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   rI   r2   r!   stricthandle_defectr)   rL   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   r2   r!   ra   r   r&   rz   )r)   rL   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 )Nrz   )superr|   )r)   argskw	__class__s      r   r|   z PolicyAPITests.MyPolicy.__init__   s*    EGGd5B5"55555r   c                 :    | j                             |           d S r   )rz   append)r)   r   r   s      r   r   z'PolicyAPITests.MyPolicy.register_defect   s    L'''''r   )r~   r   r   rz   r|   r   __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   rI   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&   rz   )r)   rL   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)
r2   r!   ra   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)r~   r   r   r   r   parserP   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 NrL   r   )
r2   r!   r3   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   )r2   r!   r3   rS   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   )r2   r!   r3   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)r2   r!   ra   r   r&   r   r3   __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^   ri   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?=
)r2   r!   ra   rS   r9   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^   ri   )	r%   r2   r!   ra   rS   r>   errorsHeaderParseErrorr9   )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%	c                    t           j        j                            d          }dD ]}|                     |          5  t          j        d|          } G d dt                    }|d	=  ||          |d	<   |                     |                                | d
           ddd           n# 1 swxY w Y   dS )z.Turning protection off allows header injectionF)r   )zHeader: Value
Bad: Injection
zHeader: NoNewLine)textzHeader: Value

Bodyr!   c                       e Zd ZdZd ZdS )CPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeaderHeaderc                     | S r   rP   )r)   kwargss     r   r9   zHPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeader.fold8  s    #r   N)r~   r   r   r   r9   rP   r   r   LiteralHeaderr   6  s(        #D$ $ $ $ $r   r   r   z
BodyN)	r2   r!   ra   rS   r%   message_from_stringrA   r&   	as_string)r)   r!   r   rk   r   s        r   test_verify_generated_headersz,PolicyAPITests.test_verify_generated_headers*  s9   %++U+KK
 	 	D 4((  3/!  $ $ $ $ $C $ $ $
 H%$1M$$7$7!  %%''OOO                		 	s    A&B22B6	9B6	)3r~   r   r   longMessagecompat32_defaultsr   r`   r   r2   r!   r3   r   r   rk   rl   
new_policycompat32r   ra   SMTPSMTPUTF8HTTPr   r#   r,   r7   rG   rM   rW   r[   re   rr   rt   r   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   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+ + +: : : C C C"
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&    r   r   c                       e Zd ZdS )TestExceptionNr   rP   r   r   r   r   H  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.badmethodQ  s    '''r   N)	r~   r   r   r   r9   r:   header_fetch_parserr<   r=   rP   r   r   r   r   P  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   )rI   r   r2   r   r   r{   s    r   test_message_from_stringz.TestPolicyPropagation.test_message_from_stringV  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   )rI   r   r2   message_from_bytesr   r{   s    r   test_message_from_bytesz-TestPolicyPropagation.test_message_from_bytes[  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StringIOrI   r   r2   message_from_filer   r)   fs     r   test_message_from_filez,TestPolicyPropagation.test_message_from_file`  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   BytesIOrI   r   r2   message_from_binary_filer   r  s     r   test_message_from_binary_filez3TestPolicyPropagation.test_message_from_binary_filee  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   )r2   parserParserr   rI   r   parsestrr)   ps     r   test_parserz!TestPolicyPropagation.test_parserl  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   )r2   r  BytesParserr   rI   r   
parsebytesr  s     r   test_bytes_parserz'TestPolicyPropagation.test_bytes_parserq  s    L$$DM$::##M8<< 	/ 	/LL-...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/r  r   Nc                     |#t           j        j                                        n|| _        t          j        || j                  S )Nr   )r2   r!   ra   rS   r   )r)   sourcer!   s      r   	_make_msgzTestPolicyPropagation._make_msgz  s;    6<nel*00222&(DDDDr   c                 n    |                                  }|                     |j        | j                   d S r   )r  assertIsr!   r)   rD   s     r   (test_parser_propagates_policy_to_messagez>TestPolicyPropagation.test_parser_propagates_policy_to_message~  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)   rD   parts      r   -test_parser_propagates_policy_to_sub_messageszCTestPolicyPropagation.test_parser_propagates_policy_to_sub_messages  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  r2   r!   ra   rS   r   r   	generator	Generatorflattenr&   getvalue)r)   rD   ro   gs       r   +test_message_policy_propagates_to_generatorzATestPolicyPropagation.test_message_policy_propagates_to_generator  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  r2   r!   ra   rS   r&   r   r  s     r   %test_message_policy_used_by_as_stringz;TestPolicyPropagation.test_message_policy_used_by_as_string  s]    nn9$)L$8$>$>s$>$K$K  M M*CDDDDDr   )r   N)r~   r   r   r2   r!   r@   r   r   r   r  r	  r  r  r  r  r"  r+  r-  rP   r   r   r   r   K  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)r2   r!   r3   r>   
ValueErrorr=   )r)   instances     r   (test_header_store_parse_rejects_newlinesz=TestConcretePolicies.test_header_store_parse_rejects_newlines  sE    <++--*"5 "4	6 	6 	6 	6 	6r   N)r~   r   r   r4  rP   r   r   r/  r/    s#        6 6 6 6 6r   r/  __main__)r   r4   r  unittestemail.errorsr2   email.policyemail.parseremail.generatoremail.messager   r   TestCaser   r   r   r   r/  r~   mainrP   r   r   <module>r>     sw   				                                     
p p p p pX& p p pn		 	 	 	 	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   